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 服务器的最大写超时时间
}
}