2016-08-17 7 views
0

를 사용하여 요청에 따라 UI를 찾을 수 없습니다, 나는 다음과 같은 INFO 레벨의 로그 메시지를 얻을 :angel이라는 응용 프로그램 PushHandler는 푸시를 활성화 할 때의 nginx, 봄 보안

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는 내 시나리오에 대한 모든 관련 정보를 포함하지 않는 것 :

를 응용 프로그램이

내 UI가

주석되는 angel이라는 봄 응용 프로그램입니다3210
@Push(transport=Transport.WEBSOCKET_XHR) 

I는 다음과 같이 추진을 위해 구성된의 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에서 테스트 한 모든 브라우저에서 발생합니다. 로그 메시지 이외에 문제가 발생하지 않았습니다.

어떻게이 로그 메시지를 제거 할 수 있습니까? 이것은 아마도 내가 아직 눈치 채지 못한 몇 가지 문제를 나타낼 수 있습니까?

답변

2

https://blog.martinfjordvald.com/2013/02/websockets-in-nginx/에 따르면 nginx의 websocket 연결은 기본적으로 60으로 설정된 proxy_read_timeout 구성 옵션을 사용합니다. 따라서 nginx는 60 초 후에 ws 연결을 끊을 것이고 브라우저는 새로운 ws 연결을 설정할 것입니다. 이 경우 연결을 다시 설정하는 요청에는 "v-uiId ="매개 변수가 포함되어야하며 이에 따라 서버는 관련 UI를 찾아야하며 모든 것이 계속 작동해야합니다.

오류 메시지는 v-uiId 매개 변수에 문제가 있음을 나타내며 어떤 이유로 서버가이를 기반으로 올바른 UI 인스턴스를 찾을 수 없습니다. 그런 다음 서버는 다른 조회 메커니즘으로 넘어가 UI 인스턴스를 반복하고 올바른 인스턴스를 찾습니다. 이것은 성공하고, 모든 것은 계속 작동합니다.

서버에 구성된 websocket 시간 초과 값이 60 일 수도 있습니다. 이 경우 nginx 또는 서버가 연결을 먼저 끊습니다. 이벤트의 순서에 따라 때로는 이상한 일이 발생할 수 있습니다.

아무 것도하지 않으면 nginx가 연결을 끊고 서버가 바로 그 후 푸시 작업을 수행 할 때 발생할 수있는 문제가 발생합니다. TCP가 작동하는 방식으로 인해 연결이 끊어진 것을 서버가 인식하지 못하면 다음 메시지를 void로 푸시 할 수 있습니다.

nginx 및/또는 서버에서 시간 초과를 제거/변경해보십시오.

대개의 경우, 서버에서 연결 닫기가 발생하면 Vaadin은 활성 연결이 없다는 것을 즉시 알게되고 푸시를 연기합니다. 중간에 누군가가 서버에 알리지 않고 연결을 끊으면 잘못 될 수 있습니다.

+0

감사합니다. 내 nginx 구성에서 proxy_read_timeout 증가 시도했다. 그 타임 아웃에 도달하면 같은 로그 메시지가 나타납니다. 나는 서버/Vaadin 측에서 타임 아웃을 변경하는 방법을 찾을 수 없었다. 사실, 나는 심지어 타임 아웃이 무엇인지 알 수 없었다. 나는 그것이 nginx에서 구성한 10 분 미만이라고 상상합니다.나는 물론 nginx의 타임 아웃을 더 늘릴 수는 있었지만 Vaadin이 무거운 짐을 덜어주는 솔루션을 갖고 싶습니다. –

+0

어떤 서버를 사용하고 있습니까? –

+0

Apache Tomcat 8.0.30 –