小程序中wss与https共用443端口的Nginx设置
2018-07-06 本文已影响23人
七逃叔
背景:朋友小程序中有个聊天室的需求,用fleck配了一个简单的wss服务(例如 wss://www.abc.com:7181),可以完成聊天室的需求。但是在放入小程序的生产环境的时候,发现wss不可以添加端口号。此时443端口已被https占用。
最终纠结出两个解决方案:
一台新的服务器- 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 *;#跨域访问设置
}
}
}