笔记搬到博客 - Nginx代理websocket超时连接断开问题

本文介绍如何配置Nginx以支持WebSocket的反向代理,并解决连接立即断开的问题。通过调整proxy_read_timeout参数至3600秒,确保WebSocket连接在一个小时内保持稳定。同时,讨论了该参数过大可能引发的超时访问问题,建议采用心跳包机制保持WebSocket的活跃状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过网络搜索、整理、实践笔记

 

配置nginx使之支持websockt的反响代理后,发现websockt连接上就立即断开,状态码为:1006

最后查到原因是proxy_read_timeout 太小,这便是websockt的有效时间

现在配置成3600,也就是维持一个小时,来解决需求。

 

 

成功,测试中一小时内没有出现过断开的现象

不过有网友怀疑proxy_read_timeout的参数的真实意义,修改的值太大可能导致某些用户的超时访问不能有效处理

经过测试,如果proxy_read_timeout 配置为5秒,访问网页的时候,如果服务器响应时间超过五秒会返回

504

Gateway Time-out

所以目前通过增加心跳的方法保持websocket是激活状态

 

 

本地配置:

location /operation-console-service/websocket {

proxy_pass http://127.0.0.1:8080/operation-console-service/websocket;

proxy_http_version 1.1;

# 读取超时设置

proxy_read_timeout 3600s;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";

}

 

<think>我们正在处理用户关于通过Nginx代理连接iohao-sdk的WebSocket问题。首先,我们需要理解iohao-sdk的WebSocket服务通常运行在特定的端口上,而Nginx作为反向代理,可以将客户端的WebSocket请求转发到该端口。关键点:1.WebSocket协议需要Nginx进行特定的配置来支持,因为它是基于HTTPUpgrade机制。2.iohao-sdk的WebSocket服务端口(例如:10100)需要被Nginx代理。配置步骤:1.在Nginx配置文件中,设置一个`server`块来监听WebSocket的外部端口(比如80或443)。2.配置`location`块,匹配WebSocket的路径(例如`/ws-game`)。3.在`location`块中,设置代理参数以支持WebSocket。具体配置示例: ```nginxserver {listen80;server_nameyour-domain.com;location/ws-game {proxy_pass http://localhost:10100;#这里填写iohao-sdk实际运行的地址和端口proxy_http_version1.1;proxy_set_header Upgrade$http_upgrade;proxy_set_header Connection"upgrade";proxy_set_headerHost $host;#可选:设置超时时间proxy_read_timeout86400s;# WebSocket连接可能需要长时间保持}} ```解释: -`proxy_http_version1.1`:使用HTTP/1.1以支持WebSocket升级。 -`Upgrade`和`Connection`头:这些是WebSocket升级所必需的。 -`proxy_read_timeout`:由于WebSocket连接是长连接,建议设置一个较长的超时时间。注意事项:1.确保iohao-sdk的WebSocket服务在运行,并且端口(10100)没有被防火墙阻止。2.如果使用SSL,需要在Nginx中配置SSL证书,并监听443端口,同时将WebSocket的路径配置在SSLserver块中。3.如果iohao-sdk的WebSocket服务有多个节点,可以使用upstream进行负载均衡。验证:1.重新加载Nginx配置:`nginx-sreload`2.使用WebSocket客户端(如JavaScript的WebSocketAPI)连接`ws://your-domain.com/ws-game`(或`wss://`对于SSL)进行测试。问题排查:如果连接失败,检查Nginx错误日志(通常位于`/var/log/nginx/error.log`)和iohao-sdk的日志。生成相关问题:根据用户的问题,我们生成以下相关问题:§§相关问题§§1.如何为Nginx配置SSL以支持安全的WebSocket连接(wss)?2.在iohao-sdk中如何设置WebSocket的端口和路径?3.Nginx代理WebSocket时出现502错误如何解决? 4.如何通过负载均衡配置多个iohao-sdk WebSocket服务节点?</think>### 通过Nginx代理连接iohao-sdk的WebSocket 要实现iohao-sdk的WebSocket通过Nginx代理,需配置Nginx处理WebSocket协议升级和长连接。以下是关键步骤和配置示例: #### 核心配置步骤 1. **启用WebSocket代理** ```nginx location /websocket-path { proxy_pass http://iohao_backend; # 指向iohao-sdk服务地址 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; } ``` - `Upgrade`和`Connection`头是WebSocket协议升级的关键[^1] 2. **长连接优化** ```nginx proxy_read_timeout 86400s; # 防止Nginx超时断开 proxy_send_timeout 86400s; ``` 3. **负载均衡配置(可选)** ```nginx upstream iohao_backend { server 192.168.1.100:10100; # iohao-sdk实例1 server 192.168.1.101:10100; # iohao-sdk实例2 } ``` #### 完整配置示例 ```nginx http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream iohao_cluster { server 10.0.0.1:10100 weight=5; server 10.0.0.2:10100; } server { listen 443 ssl; server_name game.example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location /ws { proxy_pass http://iohao_cluster; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_read_timeout 86400s; proxy_send_timeout 86400s; } } } ``` #### iohao-sdk端配置 在Java代码中设置WebSocket路径(需与Nginx匹配): ```java @Configuration public class SocketConfig { @Bean public ExternalServer externalServer() { return new ExternalServer() .setting(server -> server.setPort(10100)) .setting(server -> server.setPath("/ws")); // 与Nginx location匹配 } } ``` #### 验证步骤 1. 检查Nginx配置:`nginx -t` 2. 重载配置:`nginx -s reload` 3. 使用在线工具测试连接:`wss://game.example.com/ws` 4. 查看Nginx日志:`tail -f /var/log/nginx/access.log` #### 常见问题解决 - **连接中断**:检查`proxy_read_timeout`值 - **502错误**:确保iohao-sdk服务已启动 - **协议不匹配**:确认客户端使用`wss://`(SSL)或`ws://`(非SSL) - **跨域问题**:添加`proxy_set_header Origin "";` > 配置后,客户端应连接Nginx暴露的地址(如`wss://your-domain.com/ws`),Nginx会自动转发到iohao-sdk的真实端口[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值