[PUSH][PROXY][TOMCAT] push not working in complex environment

Hi,

We have a little complex environment where we use a Vaadin application. We have real difficulties using PUSH. Could you please help us? Thanks.

Here are the details.


| | | | | | | | | |
| Firefox | - (http) → | Load balancer | → | Httpd | - (mod_jk and kerberos auth) → | tomcat | → | Vaadin app |
| 17/34 | | | | 2.2 | (mod_proxy_wstunnel) | 8.0.15 | | 7.3.8/7.4.0 |
|| || || || |_____|

When using PUSH with WEBSOCKET, and Vaadin 7.3.8, it usually works, except when the first Websocket connexion could not be made. If the latter, the application is not usable (red spinning) and a refresh in Firefox is necessary.

When using PUSH with WEBSOCKET, and Vaadin 7.4.0, it seems to work, except a few seconds, the application is not usable (red spinning) and a refresh in Firefox is necessary. The error in Firefox is that “The endpoint is going away, either because of a server failure or because the browser is navigating away from the page that opened the connection.”

When using PUSH with STREAMING/LONG POLLING with either Vaadin 7.3.8 or 7.4.0, Firefox keeps requesting "[HTTP/1.1 426 Upgrade Required 6ms]
". Still red spinning.

I believe the proxy is responsible for all these errors, but we can’t go without it. Firstly, the mod_proxy_wstunnel is a backport I compiled from httpd 2.4 because it is not provided in 2.2. Secondly, here is my httpd config related to the proxy.

    <VirtualHost *:80>

        ServerName portalserver.domain
        ServerAlias *.portalserver.domain portalserver *.portalserver

        # For WebSocket.
        ProxyPreserveHost On
        ProxyPass               /portalserver/PUSH/ ws://127.0.0.1:9080/portalserver/PUSH/ smax=100 acquire=1000 connectiontimeout=10 ping=3 retry=0 timeout=3
        ProxyPassReverse        /portalserver/PUSH/ ws://127.0.0.1:9080/portalserver/PUSH/ retry=0

        RewriteEngine On
        # Redirection from hostname to tomcat web application.
        RewriteRule ^/$ http://portalserver.domain/portalserver [NE,R,L]


        <Location "/portalserver">

            # Kerberos.
            AuthType Kerberos
            AuthName "Kerberos Login"
            KrbMethodNegotiate on
            KrbMethodK5Passwd off
            KrbServiceName HTTP
            KrbAuthRealms DOMAIN
            Krb5KeyTab /etc/httpd/conf/portalserver.keytab
            KrbLocalUserMapping on
            KrbSaveCredentials on
            Require valid-user

        </Location>

        # AJP.
        JkMount /portalserver* worker1

    </VirtualHost>

We had also some problems when using push in a proxy environment.

We are using a Passthrough Proxy with rewrite engine and a Wildfly 8.1.0Final.

Using LONG_POLLING fixed the problem for us.

But it depends on your proxy and luckily ours works with LONG_POLLING.

Maybe you can switch your Proxy to a Proxy which supports one of the Push Modes. I think websockets aren´t supported in any proxy.