美文网首页微信小程序开发者程序员微信小程序开发
小程序中wss与https共用443端口的Nginx设置

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

作者: 七逃叔 | 来源:发表于2018-07-06 15:38 被阅读23次

    背景:朋友小程序中有个聊天室的需求,用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设置

        本文链接:https://www.haomeiwen.com/subject/yjnpuftx.html