前言
空余时间学习使用vue.js+webpack制作了一个简单的nodejs网站,web服务器使用express构建,而个人的云服务器是部署的LNMP环境,已经搭建了一个wordpress网站,为了不影响wordpress的运行遂google到了使用nginx反向代理的方法,非常好用。不过也可以使用nodejs的http-proxy模块,感兴趣可以查看一下,我对这个也不是很明了,不作介绍。
一、反向代理原理
先看图:
对上图的理解是:
正向代理:在客户这一端,替客户收发请求。
反向代理:在服务器机房这一端,替服务器收发请求,也就是说请求和响应都先经过反向代理。具有缓存、安全、负载均衡等作用。
二、Nginx核心配置文件nginx.conf解释
路径:/usr/local/nginx/conf/nginx.conf
(如无特别需要并且不懂nginx一般可使用自动配置)
1、进程数与每个进程的最大连接数:
- nginx进程数,建议设置为等于CPU总核心数
-
单个进程最大连接数,那么该服务器的最大连接数=连接数*进程数
2、Nginx的基本配置:
- 监听端口一般都为http端口:80;
- 域名可以有多个,用空格隔开:例如 server_name www.ha97.com ha97.com;
3、负载均衡列表基本配置:
-
location / {}:对aspx后缀的进行负载均衡请求,假如我们要对所有的aspx后缀的文件进行负载均衡时,可以这样写:location ~ .*.aspx$ {}
-
proxy_pass:请求转向自定义的服务器列表,这里我们将请求都转向标识为http://cuitccol.com的负载均衡服务器列表;
-
在负载均衡服务器列表的配置中,weight是权重,可以根据机器配置定义权重(如果某台服务器的硬件配置十分好,可以处理更多的请求,那么可以 为其设置一个比较高的weight;而有一台的服务器的硬件配置比较差,那么可以将前一台的weight配置为weight=2,后一台差的配置为 weight=1)。weigth参数表示权值,权值越高被分配到的几率越大;
4、Nginx对于静态文件的缓存配置
对于下图解释:
expires:过期时效
server
{
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /\.
{
deny all;
}
}
5、虚拟主机配置
include vhost/*.conf;
(如果没有此配置需添加至http配置项的末尾)
三、反向代理配置
如图(如果没有此文件夹可新建一个vhost文件夹):
在此路径(/usr/local/nginx/conf/vhost/)中新建虚拟主机文件,命名为.conf(为你使用的域名),加入下列基本配置
server {
listen 80;
server_name a.com;
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_set_header Connection "";
proxy_pass http://127.0.0.1:8080;
}
}
server_name 代表需要绑定的域名
proxy_pass 设置服务器上需要代理的程序的地址(在本例中是由express监听的端口)
listen 设置 nginx 监听端口,默认80
至此就算配置成功了,只需重启nginx即可生效
四、nginx基本指令(基于centos6.5)
启动:
nginx -c /usr/local/nginx/conf/nginx.conf
停止:
- 查询nginx主进程号:
ps -ef | grep nginx
- 从容停止Nginx
kill QUIT 主进程号
重启:
kill -HUP 主进称号或进程号文件路径
或者
/usr/nginx/sbin/nginx -s reload
五、关于反向代理的Gzip压缩配置
在使用Nginx反向代理nodejs时最好的压缩方法时在Nginx端启动Gzip,如下nginx.conf配置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 4;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
另:
我个人网站在启动Nginx的Gzip之后,访问nodejs站的时候经常出现刷新的时候响应缓慢,于是我在nodejs上也配置了压缩,一下是以express为前提的配置:
- 首先安装compression依赖
npm install compression
- 在app.js中添加相应配置:
var express = require('express');
var compression = require('compression');
var app = express();
app.use(compression());
在两边都开启压缩的情况下,响应变得正常了,但是却与很多官方的说法相悖,官方说法是在开发过程中只需要配置Nginx端的Gzip,nodejs端不用compression,所以我疑惑的这个问题目前还没想明白。
PS:后续还会继续测试,如果有新的结果,会继续补上。
网友评论