Vaadin应用程序PushHandler可以';使用nginx和spring安全性无法根据请求找到UI

Vaadin应用程序PushHandler可以';使用nginx和spring安全性无法根据请求找到UI,vaadin,vaadin7,vaadin4spring,Vaadin,Vaadin7,Vaadin4spring,激活推送时,每当我在应用程序打开超过一分钟的情况下保留选项卡时,我会收到以下信息级别日志消息: 16:57:17 INFO PushHandler - No UI was found based on data in the request, but a slower lookup based on the AtmosphereResource succeeded. See http://dev.vaadin.com/ticket/14251 for more details. 票证1425

激活推送时,每当我在应用程序打开超过一分钟的情况下保留选项卡时,我会收到以下信息级别日志消息:

16:57:17 INFO  PushHandler - No UI was found based on data in the request, but a slower lookup based on the AtmosphereResource succeeded. See http://dev.vaadin.com/ticket/14251 for more details.
票证14251似乎不包含我的场景的任何相关信息,如下所示:

该应用程序是Vaadin弹簧应用程序

我的UI用

@Push(transport=Transport.WEBSOCKET_XHR)
我使用的是为推送配置的nginx服务器,如下所示:

map $http_connection $upgrade_requested {
    default upgrade;
    ''      close;
}

server {
    listen          9002;
    server_name     localhost;
    root            /;

    location / {
            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:$server_port;

            proxy_cookie_path ~*^/.* /;
            proxy_pass http://127.0.0.1:9003/;
            proxy_redirect off;
    }

    location /vaadinServlet/PUSH {
            proxy_pass http://127.0.0.1:9003;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $upgrade_requested;
    }
当我只打开一些选项卡时,会显示此日志消息。实际上没有推送(至少没有由我的应用程序逻辑触发)。这在我测试过的所有浏览器中都会发生:Firefox、Chrome和Safari。 除了日志消息,我没有注意到任何问题

如何删除此日志消息? 这是否表明我可能还没有注意到一些问题?

基于此,nginx中的websocket连接使用proxy\u read\u timeout配置选项,默认设置为60秒。因此,nginx将在60秒后切断ws连接,然后浏览器将建立一个新的ws连接。发生这种情况时,重新建立连接的请求应该包含一个“v-uiId=”参数,服务器应该根据该参数找到相关的UI,并且一切都应该继续工作

您的错误消息表明v-uiId参数存在问题,并且由于某种原因,服务器无法根据该参数找到正确的UI实例。然后,服务器返回到另一个查找机制,该机制遍历UI实例并尝试找到正确的实例。这一次成功了,一切都在继续

此外,您的服务器还可能配置了60秒的websocket超时。在这种情况下,nginx或服务器将首先切断连接。根据事件的顺序,有时会发生奇怪的事情

如果您什么也不做,您将有一个潜在的问题,即nginx切断连接,服务器在此之后立即执行推送操作。如果服务器没有意识到连接已被切断(因为TCP的工作方式),那么它可能会将下一条消息推到空中

尝试在nginx和/或服务器中删除/更改超时

根据经验,如果连接关闭发生在服务器上,那么Vaadin将立即知道没有活动连接,并将推迟推送。如果有人在中间的某个地方切断连接而不告诉服务器,事情可能会出错。

,基于NGiNX的WebSu套连接使用默认的60x0设置的PROXY-Read超时配置选项。因此,nginx将在60秒后切断ws连接,然后浏览器将建立一个新的ws连接。发生这种情况时,重新建立连接的请求应该包含一个“v-uiId=”参数,服务器应该根据该参数找到相关的UI,并且一切都应该继续工作

您的错误消息表明v-uiId参数存在问题,并且由于某种原因,服务器无法根据该参数找到正确的UI实例。然后,服务器返回到另一个查找机制,该机制遍历UI实例并尝试找到正确的实例。这一次成功了,一切都在继续

此外,您的服务器还可能配置了60秒的websocket超时。在这种情况下,nginx或服务器将首先切断连接。根据事件的顺序,有时会发生奇怪的事情

如果您什么也不做,您将有一个潜在的问题,即nginx切断连接,服务器在此之后立即执行推送操作。如果服务器没有意识到连接已被切断(因为TCP的工作方式),那么它可能会将下一条消息推到空中

尝试在nginx和/或服务器中删除/更改超时


根据经验,如果连接关闭发生在服务器上,那么Vaadin将立即知道没有活动连接,并将推迟推送。如果有人在中间某处切断连接而不告诉服务器,事情可能会出错。

谢谢这个解释。我已经尝试在我的nginx配置中增加代理读取超时。但是,一旦超时,同样的日志消息就会出现。我无法找到如何更改服务器/Vaadin端的超时。事实上,我甚至不知道超时是什么。我想这比我在nginx中配置的10分钟还短。当然,我可以进一步增加nginx中的超时时间,但我更希望有一个解决方案,让Vaadin来完成繁重的工作。您使用的是什么服务器?apachetomcat 8.0.30感谢您的解释。我已经尝试在我的nginx配置中增加代理读取超时。但是,一旦超时,同样的日志消息就会出现。我无法找到如何更改服务器/Vaadin端的超时。事实上,我甚至不知道超时是什么。我想这比我在nginx中配置的10分钟还短。当然,我可以进一步增加nginx中的超时时间,但我更希望有一个解决方案,让Vaadin来完成繁重的工作。您使用的是什么服务器?apachetomcat 8.0.30