什么是 Nginx
一个高性能的 HTTP 和反向代理服务器,也是一个通用的 TCP/UDP 代理服务器
基本使用
设置 Nginx 安装源
$ vim /etc/yum.repos.d/nginx.repo
# 内容如下:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
安装 Nginx
$ yum install nginx -y
启动 Nginx
$ ngnix
# 或者
$ systemctl start nginx
(Nginx 启动后)
查看 Nginx 服务
$ ps aux | grep ngnix
停止 Nginx 服务
# 等待 Nginx 服务自行关闭(推荐)
$ nginx -s quit
# 使用系统命令关闭服务(推荐)
$ systemctl stop nginx.service
# 立即停止 Nginx 服务(不推荐)
$ nginx -s stop
# 杀死 Nginx 进程(不推荐)
$ killall ngnix
(停止的 Nginx 服务)
重启 Nginx
$ systemctl restart nginx.service
# 或者
$ ngnix -s reload
查看启用的端口
$ netstat -tlnp
反向代理 node
项目部署的时候,使用 Nginx 反向代理 Node.js。具体的步骤如下:
首先我们要在 nginx.cnf 文件中的 http 节点打开下面的配置:
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 打开这一行的配置
include /etc/nginx/conf.d/*.conf;
}
然后每个域名的配置文件就放到这个目录/etc/nginx/conf.d/下,文件后缀以conf结束。
第一种方式,这种简单:
server {
listen 80 ;
server_name localhost;
root /xxx/xxx/hxxydexx/;
#set $my_server_name $scheme://$server_name;
#if ( $my_server_name != https://$server_name ) {
# rewrite ^ https://$server_name$request_uri? permanent;
#}
error_log /var/log/nginx/hyde_error.log error;
access_log /var/log/nginx/hyde_accss.log main;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_http_version 1.1;
proxy_set_header Connection "";
# 不需要考虑到负载的,就无需配置upstream节点。
proxy_pass http://127.0.0.1:3000;
}
error_page 404 /404.html;
location = /xxx/xxx/40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /xxx/xxx/50x.html {
}
}
第二种方式,考虑到负载
upstream node {
server 127.0.0.1:3000;
}
server {
listen 80 ;
server_name localhost;
root /xxx/xxx/hxxydexx/;
#set $my_server_name $scheme://$server_name;
#if ( $my_server_name != https://$server_name ) {
# rewrite ^ https://$server_name$request_uri? permanent;
#}
error_log /var/log/nginx/hyde_error.log error;
access_log /var/log/nginx/hyde_accss.log main;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_http_version 1.1;
proxy_set_header Connection "";
# 配置upstream节点
proxy_pass http://node;
}
error_page 404 /404.html;
location = /xxx/xxx/40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /xxx/xxx/50x.html {
}
}
然后重启或者重新载入nginx的配置文件即可。命令如下
# 检查nginx配置文件中语法是否正确
$ nginx -t
# 重启 nginx
$ service nginx restart
# 重载配置文件
$ nginx -s reload
HTTPS
upstream node {
server 127.0.0.1:3000;
}
server {
listen 443 ssl; #指定使用443端口,开启SSL
server_name www.mainhou.com; #指定网站域名
ssl on;
ssl_certificate /root/node/ssl/mh.crt;#配置证书位置
ssl_certificate_key /root/node/ssl/mh.key;#配置秘钥位置
root /xxx/xxx/hxxydexx/;
error_log /var/log/nginx/hyde_error.log error;
access_log /var/log/nginx/hyde_accss.log main;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_http_version 1.1;
proxy_set_header Connection "";
# 配置upstream节点
proxy_pass http://node;
}
error_page 404 /404.html;
location = /xxx/xxx/40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /xxx/xxx/50x.html {
}
}
server {
listen 80;
server_name www.mainhou.com; #指定网站域名
return 301 https://$server_name$request_uri; #设置301重定向
}
Gzip 压缩
$ vim /usr/local/nginx/conf/nginx.conf
gzip on; # 开启Gzip
gzip_min_length 1k; # 不压缩临界值,大于1K的才压缩,一般不用改
gzip_buffers 4 16k; # 默认就好
#gzip_http_version 1.0; # 默认就好
gzip_comp_level 2; # 压缩级别,1-10,数字越大压缩的越好,时间也越长,根据自己的需求更改
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; # 进行压缩的文件类型,缺少什么类型加上,JavaScript有两种写法都写上.
gzip_vary off; # Squid等缓存服务
gzip_disable "MSIE [1-6]\."; # IE6对Gzip不友好,忽略IE6
重新加载 nginx
$ sudo /usr/local/nginx/sbin/nginx -s reload
查看相应页面的 DevTools
是否有响应头 Content-Encoding: gzip
,如果有则代表 Gzip
成功。
负载均衡
参考
【1】前端开发者必备的 Nginx 知识
【2】Nginx 中文文档
【3】NGINX 反向代理
【4】Nginx开启Gzip压缩大幅提高页面加载速度
【5】Nginx 反向代理与负载均衡详解