Nginx反向代理Nodejs详细配置

前言

空余时间学习使用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:后续还会继续测试,如果有新的结果,会继续补上。

你可能感兴趣的:(Nginx反向代理Nodejs详细配置)