Vaadin 23长轮询推送UI同步异常:NGINX与Vaadin配置咨询
Vaadin LONG_POLLING推送与NGINX代理超时配置指南
一、Vaadin 推送超时配置
Vaadin中控制长轮询推送超时的核心参数是push.timeout,单位为毫秒,必须设置为小于NGINX的代理读取超时,避免NGINX提前断开连接。
配置方式:
- 全局配置(推荐):在
application.properties或application.yml中添加:# 设置为25秒,需小于NGINX的proxy_read_timeout vaadin.push.timeout=25000 - UI级配置:在
@Push注解中直接指定(优先级高于全局配置):@Push(transport = Transport.LONG_POLLING, timeout = 25000) public class MainView extends VerticalLayout { // ... }
二、NGINX 代理超时配置
NGINX中影响长轮询连接的关键参数如下,需在代理的location块中配置:
核心参数说明:
proxy_read_timeout:最关键,NGINX等待后端(Vaadin应用)响应的超时时间,必须大于Vaadin的push.timeout,建议比Vaadin超时大5-10秒。proxy_send_timeout:NGINX向后端发送请求的超时时间,需与proxy_read_timeout保持一致或更大。proxy_connect_timeout:NGINX与后端建立连接的超时时间,一般设为10秒即可。- 额外配置:开启HTTP/1.1并清空
Connection头,确保长连接正常维持。
配置示例:
location / { proxy_pass http://your-vaadin-app:8080; # 替换为你的Vaadin应用地址 proxy_http_version 1.1; proxy_set_header Connection ""; proxy_connect_timeout 10s; proxy_send_timeout 30s; proxy_read_timeout 30s; # 必须大于Vaadin的push.timeout(如25秒) }
三、参数调整后仍未解决的排查步骤
- 验证配置生效:
- Vaadin端:通过代码
VaadinService.getCurrent().getDeploymentConfiguration().getPushTimeout()获取实际生效的超时值,确认与配置一致。 - NGINX端:执行
nginx -t验证配置语法正确,再执行nginx -s reload重启生效,查看nginx.conf确认配置已加载。
- Vaadin端:通过代码
- 排查中间网络设备:检查防火墙、负载均衡器(如SLB、ELB)是否有独立的连接超时设置,需确保这些设备的超时时间大于NGINX的
proxy_read_timeout。 - 检查Session超时:确保Spring Boot的Session超时(
server.servlet.session.timeout)大于Vaadin推送超时,避免Session提前过期导致连接中断。 - 查看详细日志:
- Vaadin端:开启DEBUG日志
logging.level.com.vaadin=DEBUG,排查连接中断的具体原因。 - NGINX端:查看
access.log和error.log,确认是否有upstream timed out等超时相关日志。
- Vaadin端:开启DEBUG日志
内容的提问来源于stack exchange,提问作者alexanoid
相关产品推荐
相关产品推荐

