Vaadin 23.1.7开发模式下Nginx WebSocket超时问题求助
解决方案:适配Vaadin开发模式的Nginx配置
问题根源在于Vaadin开发模式下用于热加载的WebSocket请求,在原有配置中未被正确处理,导致Nginx触发默认60秒超时。以下是修正后的完整Nginx配置方案:
1. 在http全局块添加WebSocket连接映射
首先在Nginx的http段中添加以下配置,用于动态处理WebSocket的Connection头:
map $http_upgrade $connection_upgrade { default upgrade; '' close; }
2. 修改location代理配置
将原有location /的配置替换为以下内容:
location / { proxy_pass http://192.168.2.10:17080/; # 转发客户端真实请求信息 proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_cookie_path ~*^/.* /; proxy_redirect off; # 正确识别并转发WebSocket请求 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; # 延长超时时间,覆盖Nginx默认60秒限制 proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; }
关键调整说明
- 动态Connection头处理:通过
map指令,仅当请求包含Upgrade头时才设置Connection: Upgrade,避免非WebSocket请求的头信息异常。 - 修正Host头:将
Host $host:$server_port改为Host $host,确保Vaadin能正确识别请求主机地址,避免开发模式下资源路径解析错误。 - 延长超时窗口:将超时时间调整为720秒,完全覆盖开发模式下热加载WebSocket的心跳周期,避免触发超时断开。
额外兜底配置(可选)
如果上述配置仍有问题,可以单独为Vaadin开发模式专属WebSocket路径添加优先级更高的location:
location /vaadin-dev-server/ws { proxy_pass http://192.168.2.10:17080/vaadin-dev-server/ws; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; }
内容的提问来源于stack exchange,提问作者Franz
相关产品推荐
相关产品推荐

