nginx对nodejs服务器的http、https、ws、wss的配置

Linux下nginx配置nodejs服务器

目录

软件版本

  1. Linux 的centos7系统
  2. nodejs:v8.11.1
  3. nginx: v1.12.1
  4. 服务器:(其实跟配置nginx没有什么关系)

    短链接:使用express

    长连接:使用websocket

话不多说上干货

静态资源配置

文件名*.conf
server{
    listen 80;
    listen 443 ssl;
    server_name xxx.xxxx.xxx; # 域名或者localhost或者ip
    client_max_body_size 200M;
    ssl_certificate /**.pem;
    ssl_certificate_key /**.key;
    location ~ ^/(css/|fonts/|images/|js/){ # 访问静态资源
        root /**/public;#静态文件路径(http://xxx.xxxx.xxx/css==访问/**/public/css下的文件)
        access_log off;
        expires max;
    }
    location ~ .*\.(gif|jpg|jpeg|png)$ # 缓存
    {
        expires 30d;
    }
    location / { # 访问静态网页
        root        /root/project/**; # 静态网页的路径
            index        index.php index.html index.html;
    }
}

注:

server_name:域名or localhost or IP

  • 域名:用户可以直接在浏览器地址访问http://域名/(默认80端口)or https://域名/(默认443)
  • localhost and IP:用户可以直接在浏览器地址访问http://公网IP/(默认80端口)or https://公网IP/(默认443)

listen 443 ssl:设置https访问模式

ssl_certificate /*.pem :https的安全证书的pem文件

ssl_certificate_key /*.key :https的安全证书的key文件(因为我用的是阿里云服务器,所以这两个文件是从阿里云管理平台申请的证书,申请时间挺快的)

反向代理配置

因为我主要用于一个小型的nodejs服务器,所以登录用短链接,游戏中用长连接实现
文件名*.conf

    upstream ws{#长连接服务器 负载均衡
        server 127.0.0.1:6080;#游戏服务器1
        server 127.0.0.1:6081;#游戏服务器2
        server 127.0.0.1:6082;#游戏服务器3
        server 127.0.0.1:6083;#游戏服务器4
        server 127.0.0.1:6084;
        ...
        keepalive 3000;
    }
    server{//短连接
        listen 0.0.0.0:80;
        listen 443 ssl;
        server_name xx.xxxxx.xxx; # 同上
        ssl_certificate /etc/nginx/conf.d/*.pem;
        ssl_certificate_key /etc/nginx/conf.d/*.key;
        location ~ ^/(css/|fonts/|images/|js/){
            root /root/project/***/public;
            access_log off;
            expires 10d;
        }
        location ~ .*\.(gif|jpg|jpeg|png)$
        {
            expires 30d;
        }
        location /{
        proxy_pass_request_headers on;
        proxy_set_header Host  $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Nginx-Proxy true;
        proxy_redirect off;
        client_max_body_size 10m;#传输数据的大小
        proxy_pass http://127.0.0.1:6000;
    }
    server{#长连接
        listen 80;
        listen 443 ssl;
        server_name xx.xxxx.xxx;
        ssl_certificate /etc/nginx/conf.d/*.pem;
        ssl_certificate_key /etc/nginx/conf.d/*.key;
        location ~ ^/(css/|fonts/|images/|js/){
            root /root/project/***/public;
            access_log off;
            expires 10d;
        }
        location / {
            proxy_http_version 1.1;
            proxy_set_header Host  $host;
            proxy_set_header X-Real-Ip $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Nginx-Proxy true;
            proxy_redirect off;
            client_max_body_size 10m;
            proxy_pass http://ws;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_connect_timeout 300s; #配置点1
            proxy_read_timeout 300s; #配置点2,如果没效,可以考虑这个时间配置长一点
            proxy_send_timeout 300s; #配置点3
       }
    }

注:

upstream ws :配置负载均衡,nginx会随负载均衡算法随机的把长连接请求转接到此区域中的某一个连接。(我这里主要是用于:扩充用户的长连接连接数。)

proxy_pass:代理请求路径。自己服务器端的路径。

proxy_pass http://ws:长连接负载均衡的配置

proxy_connect_timeout 300s or proxy_read_timeout 300s or proxy_send_timeout 300s:主要是配置nginx对长连接的保持时间,如果此长连接一段时间不请求任何命令后,nginx会在此时间后断开此链接。一般会在客户端设置一个心跳,在小于此时间后发起一次请求,用以保持此长连接的连接(这个是我的解决办法,不知道是否有更好的方法,欢迎提出来,学习一下)

大致到这里,你就可以远程访问你的服务器了。

nodejs简单的游戏服务器请点击 github项目地址

nodejs实现第三方登录请点击 nodejs服务端实现微信小游戏登录