小程序中wss与https共用443端口的Nginx设置

背景:朋友小程序中有个聊天室的需求,用fleck配了一个简单的wss服务(例如 wss://www.abc.com:7181),可以完成聊天室的需求。但是在放入小程序的生产环境的时候,发现wss不可以添加端口号。此时443端口已被https占用。

最终纠结出两个解决方案:

  1. 一台新的服务器
  2. nginx反向代理

1的成本太高,理所当然的被放弃。那么就开始安装nginx。

环境清单

  • 服务器:阿里云
  • 操作系统:windows
  • web服务器:IIS

Nginx安装

没啥说的官网即可http://nginx.org/en/download.html
解压到文件夹直接运行。输入127.0.0.1没有看到欢迎页。

端口占用问题

在error.log发现这类错误bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)就是80端口被占用。打开注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP将start值由3改为0。重启电脑。nginx欢迎页出来了,iis服务无法启动了,此时将服务中的iis设为延迟启动,这样确保nginx的启动和iis的正常使用。

Nginx reload无效问题

在未配置完之前建议使用命令操作,不然会出现无论怎么配置,都是指向的默认欢迎页面,打开任务管理器才发现nginx起了很多服务,多个nginx在监听80端口,只有第一个起作用,所以还是用命令进行操作.
开启->start nginx.
重载->nginx -s reload

Nginx配置

在配置之前,需要将原先IIS中的地址端口号给为80、443 以外的端口号。


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    upstream mysvr {
      server www.abc.com:8181  weight=2;  #replace  你的80端口指向地址
    }
    server{
        listen 80;
        server_name www.abc.com abc.com;  #replace  你的访问域名
        location /
        {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            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_pass http://mysvr;
            expires      3d;
        }
    }

    server{
        listen       443;
        server_name  www.abc.com abc.com; #replace  你的443端口指向地址

        ssl on;
        ssl_certificate ./key/214550615730230.pem;   #replace  你的证书地址
        ssl_certificate_key ./key/214550615730230.key; #replace  你的证书地址

        ssl_session_timeout 5m;
        ssl_session_cache shared:SSL:50m;
        ssl_protocols TLSV1.1 TLSV1.2 SSLv2 SSLv3;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers on;

        #wss协议转发 小程序里面要访问的链接
        # 访问:
        location /wss {
            proxy_pass https://www.abc.com:7181;  #replace  你的小程序地址
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
        }

        location /{
            proxy_pass https://www.abc.com:8383;    #replace  你的https地址
            proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            add_header Access-Control-Allow-Origin *;#跨域访问设置
        }

    }
}

你可能感兴趣的:(小程序中wss与https共用443端口的Nginx设置)