Follow up to [1] based on users@ experience... On Fri, Apr 17, 2015 at 3:38 PM, Marc Hörsken <i...@marc-hoersken.de> wrote: > > I just figured out the configuration issue causing my problem. > > Original configuration mod_proxy_wstunnel with SwampDragon: > > ProxyPass /data/ ws://127.0.0.1:9001/data/ > ProxyPassReverse /data/ ws://127.0.0.1:9001/data/ > ProxyPass /settings.js http://127.0.0.1:9001/settings.js > ProxyPassReverse /settings.js http://127.0.0.1:9001/settings.js > ProxyPreserveHost On > ProxyRequests Off > ProxyVia On > > The following configuration for mod_proxy_wstunnel with SwampDragon works > fine: > > ProxyPassMatch /data/(\d+)/(\w+)/websocket > ws://127.0.0.1:9001/data/$1/$2/websocket > ProxyPass /data/info http://127.0.0.1:9001/data/info > ProxyPassReverse /data/info http://127.0.0.1:9001/data/info > ProxyPass /settings.js http://127.0.0.1:9001/settings.js > ProxyPassReverse /settings.js http://127.0.0.1:9001/settings.js > ProxyPreserveHost On > ProxyRequests Off > ProxyVia On > > The issue was caused by the fact that /data/info is requested before a > WebSocket-upgrade > request to /data/(\d+)/(\w+)/websocket is performed. Because /data/info was > redirected to > the WebSocket-server using the same rule as /data/(\d+)/(\w+)/websocket > before, > mod_proxy_wstunnel continued to also forward all HTTP-traffic to the > WebSocket-server. >
As already proposed in [1], shouldn't mod_proxy_wstunnel should DECLINE[D] the request if it is not an "Upgrade: WebSocket" one? This could possibly simplify the configuration above to: ProxyPass / ws://127.0.0.1:9001/ ProxyPass / http://127.0.0.1:9001/ The patch would be something like: Index: modules/proxy/mod_proxy_wstunnel.c =================================================================== --- modules/proxy/mod_proxy_wstunnel.c (revision 1665828) +++ modules/proxy/mod_proxy_wstunnel.c (working copy) @@ -305,7 +320,7 @@ static int proxy_wstunnel_handler(request_rec *r, int status; char server_portstr[32]; proxy_conn_rec *backend = NULL; - char *scheme; + const char *scheme, *upgrade; int retry; conn_rec *c = r->connection; apr_pool_t *p = r->pool; @@ -324,6 +339,25 @@ static int proxy_wstunnel_handler(request_rec *r, return DECLINED; } + upgrade = apr_table_get(r->headers_in, "Connection"); + if (upgrade) { + if (strcasecmp(upgrade, "Upgrade") != 0) { + upgrade = NULL; + } + else { + upgrade = apr_table_get(r->headers_in, "Upgrade"); + if (upgrade && strcasecmp(upgrade, "WebSocket") != 0) { + upgrade = NULL; + } + } + } + if (!upgrade) { + ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, + APLOGNO() "%s: declining URL %s (not WebSocket)", + scheme, url); + return DECLINED; + } + uri = apr_palloc(p, sizeof(*uri)); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02451) "serving URL %s", url); -- [1] https://mail-archives.apache.org/mod_mbox/httpd-dev/201503.mbox/%3CCAKQ1sVPq-9cqS4zKvfwuC5Hi1mXZ=pkfuxrqsv2lexsnrzd...@mail.gmail.com%3E