ws 和 wss 是 WebSocket 协议的两种不容形式,默认端口分别是80,443,主要区别在于是否使用了 SSL/TSL 加密;之前负责过一个实时对话聊天的项目, 项目中的聊天对话就用到了 WebSocket 协议;因此,记录整理如何使用 nginx 配置 ws 、wss;
访问ws://localhost:8100/ws
自动代理转发到ws://127.0.0.1:8000
上
server / { listen 8100; server_name localhost; root /var/www/example; # 网站根目录 location /ws { proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; # WebSocket 需要使用 HTTP/1.1 协议。 proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection "Upgrade"; # proxy_set_header X-Real-IP $remote_addr; # 将客户端的真实 IP 地址传递到目标服务器。 proxy_read_timeout 3600s; # 设置与 WebSocket 服务器的最大读超时时间 proxy_send_timeout 3600s; # 设置与 WebSocket 服务器的最大写超时时间 } }
在ws的基础上增加了SSL/TLS加密确保数据安全,有的平台必须要求使用wss协议,如微信小程序;
访问:wss://www.xxxxx.com/wss
自动代理转发到内部的ws://127.0.0.1:8000
上;
server / { listen 443 ssl; server_name www.xxxxx.com; root /var/www/example; # 网站根目录 # SSL证书和私钥 ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; # 其他 SSL 配置(根据需要) ssl_session_timeout 5m; # 设置 SSL 会话的超时时间为 5 分钟。 ssl_session_cache shared:SSL:50m; ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; send_timeout 12s; # 如果客户端在 12 秒内没有接收到数据,连接将被关闭。 keepalive_timeout 65; # 设置保持活动连接的超时时间。 location /wss { proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-Real-IP $remote_addr; # 将客户端的真实 IP 地址传递到目标服务器。 proxy_read_timeout 3600s; # 设置与 WebSocket 服务器的最大读超时时间 proxy_send_timeout 3600s; # 设置与 WebSocket 服务器的最大写超时时间 } }