微信小程序的websocket 服务端实现wss的nginx代理配置实现

本文首先发表于应用享评,新手请看请问,高手飘过。

有很多朋友知道ws,但不懂得wss是什么。

首先什么是wss:WSS 是 Web Socket Secure 的简称, 它是 WebSocket 的加密版本. 我们知道 WebSocket 中的数据是不加密的, 但是不加密的数据很容易被别有用心的人窃取, 因此为了保护数据安全, 人们将 WebSocket 与 SSL 结合, 实现了安全的 WebSocket 通信, 即 WebSocket Secure.所以说 WSS 是使用 SSL 进行加密了的 WebSocket 通信技术.

知道了什是wss后,那么,你首先实现ws服务,ws服务可以用java的netty、php、node.js的http://socket.io 来实现,相关方法请自行查找相关详细资料,这不是本文讨论的重点;

假设我们实现了ws服务,地址为ws://119.126.135.18:8000,那么就通过nginx配置ssl加密代理连接就可以了,首先你要确定用哪个域名的路劲来访问wss服务,比如用:http://www.yourdomainname.com/wss,那么yourdomainname.com是你的域名,你首先要生成这个yourdomainname.com域名的加密证书,生成方法请看《为苹果ATS和小程序搭建 Nginx + HTTPS 服务》,你面收详细的生成ssl证书的方法;启动你的ws服务,然后配置nginx:upstream websocket {server 119.126.135.18:8000;}######################## default ############################server {listen 443 ssl; server_name yourdomainname.com;

# SSL 验证配置 ssl_certificate "/etc/letsencrypt/live/http://www.yourdomainname.com/fullchain.pem"; ssl_certificate_key "/etc/letsencrypt/live/http://www.yourdomainname.com/privkey.pem"; # 默认值 ssl_ciphers HIGH:!aNULL:!MD5; # 据说这个兼容 ie6 xp , 但实际测试发现根本打不开网页啊 #ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5"; #ssl_ciphers "EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5"; #ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_session_timeout 10m; ssl_protocols TLSv1.2 TLSv1.1 TLSv1; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m;

listen 80;server_name name yourdomainname.com;access_log /data/wwwlogs/access_nginx.log combined;root /data/wwwroot/domainname;index index.html index.htm index.php;

location ~ /.well-known {allow all;}

location /wss { proxy_pass ;#代理到上面的地址去 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; }

location /nginx_status {stub_status on;access_log off;allow 127.0.0.1;deny all;}location ~ [^/]\.php(/|$) {#fastcgi_pass remote_php_ip:9000;fastcgi_pass unix:/dev/shm/php-cgi.sock;fastcgi_index index.php;include fastcgi.conf;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {expires 30d;access_log off;}location ~ .*\.(js|css)?$ {expires 7d;access_log off;}}

通过保存上面的配置,重点在加黑部分,重新启动nginx,然后你就可以以wss://http://www.yourdomainname.com/wss路劲访问你的websocket服务了;