You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaadin 23长轮询推送UI同步异常:NGINX与Vaadin配置咨询

Vaadin LONG_POLLING推送与NGINX代理超时配置指南

一、Vaadin 推送超时配置

Vaadin中控制长轮询推送超时的核心参数是push.timeout,单位为毫秒,必须设置为小于NGINX的代理读取超时,避免NGINX提前断开连接。

配置方式:

  1. 全局配置(推荐):在application.properties或application.yml中添加:
    # 设置为25秒,需小于NGINX的proxy_read_timeout
    vaadin.push.timeout=25000
    
  2. 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秒)
}

三、参数调整后仍未解决的排查步骤

  1. 验证配置生效:
    • Vaadin端:通过代码VaadinService.getCurrent().getDeploymentConfiguration().getPushTimeout()获取实际生效的超时值,确认与配置一致。
    • NGINX端:执行nginx -t验证配置语法正确,再执行nginx -s reload重启生效,查看nginx.conf确认配置已加载。
  2. 排查中间网络设备:检查防火墙、负载均衡器(如SLB、ELB)是否有独立的连接超时设置,需确保这些设备的超时时间大于NGINX的proxy_read_timeout。
  3. 检查Session超时:确保Spring Boot的Session超时(server.servlet.session.timeout)大于Vaadin推送超时,避免Session提前过期导致连接中断。
  4. 查看详细日志:
    • Vaadin端:开启DEBUG日志logging.level.com.vaadin=DEBUG,排查连接中断的具体原因。
    • NGINX端:查看access.log和error.log,确认是否有upstream timed out等超时相关日志。

内容的提问来源于stack exchange,提问作者alexanoid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:00:47