nginx支持wss配置

nginx证书

nginx.conf配置

 

转载于:https://www.cnblogs.com/zhaoshang/p/9109195.html

### Nginx 配置 WSS (WebSocket Secure) 为了在 Nginx配置 WSS(WebSocket Secure),需要确保 SSL/TLS 已经正确设置并启用。以下是详细的配置方法: #### 1. 启用 SSL 并监听 HTTPS 请求 Nginx 的 `server` 块中应包含 `listen 443 ssl;` 来启动 HTTPS 和 WSS 支持。同时,指定证书文件路径以完成 SSL 配置。 ```nginx server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/cert.pem; # 替换为实际的证书路径 ssl_certificate_key /path/to/key.pem; # 替换为实际的私钥路径 ... } ``` 此部分配置用于加载 SSL 证书和密钥[^2]。 --- #### 2. 设置 WebSocket 协议升级 通过 `proxy_set_header` 指令来传递必要的 HTTP 头部字段,使客户端能够成功协商 WebSocket 握手过程中的协议升级。 ```nginx location /wssapp/ { proxy_pass http://backend_server; # 将请求转发到后端 WebSocket 服务 proxy_http_version 1.1; # 使用 HTTP/1.1 版本支持持久连接 proxy_set_header Upgrade $http_upgrade; # 转发 Upgrade 字段至后端 proxy_set_header Connection "upgrade"; # 修改 Connection 字段为 upgrade proxy_set_header Host $host; # 转发主机名给后端 } ``` 这些头部字段对于 WebSocket 握手至关重要,缺少它们可能导致握手失败[^3]。 --- #### 3. 映射 `$http_upgrade` 参数 为了让 Nginx 正确识别 WebSocket 请求,需定义一个映射变量 `$connection_upgrade`,它会根据 `$http_upgrade` 的值动态决定是否执行协议升级。 ```nginx http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { location /ws/ { proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } } } ``` 这段代码片段允许 Nginx 自动检测并适配 WebSocket 请求[^5]。 --- #### 4. 解决常见问题 - **连接立即关闭**:检查 Nginx 和后端服务器之间的超时时间设置,适当增加 `proxy_read_timeout` 或其他相关参数。 - **无法建立连接**:验证 `Upgrade` 和 `Connection` 头部已正确定义,并且后端服务正常工作。 - **性能优化**:调整缓冲区大小 (`proxy_buffer_size`) 和缓存策略以提高效率[^3]。 --- #### 5. 推荐最佳实践 - 对于生产环境,建议始终使用 WSS 而非 WS,从而保障数据传输的安全性。 - 创建独立的 `location` 块专门服务于 WebSocket 流量,减少与其他流量的竞争。 - 实施速率限制或最大并发连接控制,防止资源耗尽。 --- ### 示例完整配置 以下是一个完整的 Nginx 配置实例,适用于 WSS 场景: ```nginx http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream websocket_backend { server backend_server_ip:port; } server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem; location /wss/ { proxy_pass http://websocket_backend/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_read_timeout 86400; # 提高读取超时时间 } } } ``` 以上配置展示了如何将前端用户的 WSS 请求安全地转发到后端 WebSocket 服务[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值