Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

upstream prematurely closed connection while reading response header from upstream #10861

Closed
tstsogoo opened this issue May 1, 2018 · 5 comments
Milestone

Comments

@tstsogoo
Copy link

tstsogoo commented May 1, 2018

  • Vaadin 8.4.0 /No problem with vaadin 8.3.3/
  • @Push(transport = Transport.WEBSOCKET_XHR)
  • Spring boot 2.0.1

nginx error
upstream prematurely closed connection while reading response header from upstream

java.lang.NullPointerException: null
.onThrowable(PushAtmosphereHandler.java:114)         |-ERROR   |2018-04-30 23:16:05.000| Exception in push connection
java.lang.NullPointerException: null
.log(DirectJDKLog.java:182)                          |-ERROR   |2018-04-30 23:26:09.510| Servlet.service() for servlet [negdoorMainServlet] threw exception
java.lang.IllegalStateException: Cannot create a session after the response has been committed
        at org.apache.catalina.connector.Request.doGetSession(Request.java:2999)
        at org.apache.catalina.connector.Request.getSession(Request.java:2434)
        at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:896)
        at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:231)
        at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:597)
        at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:231)
        at com.vaadin.server.VaadinServletRequest.getWrappedSession(VaadinServletRequest.java:58)
        at com.vaadin.server.VaadinService.getWrappedSession(VaadinService.java:949)
        at com.vaadin.server.VaadinService.findOrCreateVaadinSession(VaadinService.java:734)
        at com.vaadin.server.VaadinService.findVaadinSession(VaadinService.java:602)
        at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1595)
        at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:445)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:557)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:527)
        at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:134)
        at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
        at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:158)
        at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:126)
        at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:111)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:84)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
        at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:677)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)

nginx config

server {
    listen xxx.xxx.xxx.xxx:443 ssl http2;

    server_name tld.com;
    server_name www.tld.com;
    server_name ipv4.tld.com;

    ssl_certificate             /opt/psa/var/certificates/cert-xxxxxx;
    ssl_certificate_key         /opt/psa/var/certificates/cert-xxxxxx;
    ssl_client_certificate      /opt/psa/var/certificates/cert-xxxxxx;

    client_max_body_size 128m;

    # disable unsupported ciphers
    ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;

    # ssl optimizations
    ssl_session_cache shared:SSL:60m;
    ssl_session_timeout 60m;
    add_header Strict-Transport-Security "max-age=31536000";

    root "/var/www/vhosts/tld.com/httpdocs";
    access_log "/var/www/vhosts/system/tld.com/logs/proxy_access_ssl_log";
    error_log "/var/www/vhosts/system/tld.com/logs/proxy_error_log";

    if ($host ~* ^www\.tld\.com$) {
            #rewrite ^(.*)$ https://tld.com$1 permanent;
            return 301 https://tld.com$request_uri;
    }


    location / {
            proxy_pass https://xxx.xxx.xxx.xxx:801; #7081 | 801
            proxy_set_header Host             $host;
            proxy_set_header X-Real-IP        $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-Accel-Internal /internal-nginx-static-location;

            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

            proxy_connect_timeout   3600;
            proxy_read_timeout      84600s;
            proxy_send_timeout      84600s;
    }

     location ~ ^/(vaadinServlet|VAADIN) {
           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_http_version        1.1;
           proxy_set_header          Upgrade                 $http_upgrade;
           proxy_set_header          Connection              "upgrade";
           proxy_buffering           off;
           proxy_ignore_client_abort off;
           proxy_pass                https://xxx.xxx.xxx.xxx:801;
           proxy_read_timeout 84600s;
           proxy_send_timeout 84600s;
           proxy_redirect off;
    }

    location /internal-nginx-static-location/ {
            alias /var/www/vhosts/tld.com/httpdocs/;
            internal;
    }

    location ~ ^/(plesk-stat|awstats-icon|webstat|webstat-ssl|ftpstat|anon_ftpstat) {
            proxy_pass https://xxx.xxx.xxx.xxx:7081;
            proxy_set_header Host             $host;
            proxy_set_header X-Real-IP        $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-Accel-Internal /internal-nginx-static-location;
            access_log off;
    }

    add_header X-Powered-By PleskLin;

        include "/var/www/vhosts/system/tld.com/conf/vhost_nginx.conf";
}
# VAADIN PUSH
    map $http_upgrade $connection_upgrade {
            default upgrade;
            '' close;
    }


server {
        listen xxx.xxx.xxx.xxx:80;

        server_name tld.com;
        server_name www.tld.com;
        server_name ipv4.tld.com;

        client_max_body_size 128m;

        return 301 https://$host$request_uri;
}

https://stackoverflow.com/questions/50094007/nginx-499-error-vaadin-8-spring-boot/50102979#50102979

@knoobie
Copy link
Contributor

knoobie commented May 1, 2018

Sounds like it could relate to #10816 (just a guess)

@TatuLund
Copy link
Contributor

TatuLund commented May 1, 2018

@tstsogoo What @knoobie suggest, could be right. You probably then should have some other exceptions on your log. The one you have here is the consequence, i.e. getSession throws this, because session creation had failed earlier. It is easy to verify the theory by testing 8.5-SNAPSHOT, which already has a fix. 8.4.1 is to be released ASAP as well.

@tsuoanttila
Copy link
Contributor

@tstsogoo, can you test your issue with the just released 8.4.1?

@tstsogoo
Copy link
Author

tstsogoo commented May 7, 2018

fixed by 8.4.1 @tsuoanttila

@elmot elmot closed this as completed May 8, 2018
@tstsogoo
Copy link
Author

tstsogoo commented Dec 27, 2018

vaadin 8.6.3, NGINX Log:
499

@ZheSun88 ZheSun88 added this to the Invalid milestone Dec 27, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants