You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by ri...@xentu.com on 2018/12/04 20:00:34 UTC
Tomcat behind Apache web server ProxyPass settings for WebSocket
I'm trying to see the WebSocket examples that ship with Tomcat 9 in
action.
If I point my browser directly at tomcat on 8080, they work.
However, Tomcat is behind an Apache2 webserver and I can't seem to get
the ProxyPass settings right. Other Tomcat applications work if I access
them via Apache, but WebSocket applications don't. The snake demo for
example, gives a 'Info: WebSocket closed' message.
Apache is on the same server as Tomcat and has the proxy_wstunnel mod
loaded.
The relevant (I think) part of my VirtualHost in the Apache2 conf file
is like this:
ProxyPass / http://127.0.0.1:8080/ #works ok
ProxyPassReverse / http://127.0.0.1:8080/ #works ok
ProxyPass / ws://127.0.0.1:8080/
ProxyPassReverse / ws://127.0.0.1:8080/
Could anyone tell me what's wrong here?
Thanks.
Richard
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org
Re: Tomcat behind Apache web server ProxyPass settings for WebSocket
Posted by ri...@xentu.com.
On 2018-12-04 20:00, richard@xentu.com wrote:
> I'm trying to see the WebSocket examples that ship with Tomcat 9 in
> action.
>
> If I point my browser directly at tomcat on 8080, they work.
>
> However, Tomcat is behind an Apache2 webserver and I can't seem to get
> the ProxyPass settings right. Other Tomcat applications work if I
> access them via Apache, but WebSocket applications don't. The snake
> demo for example, gives a 'Info: WebSocket closed' message.
>
> Apache is on the same server as Tomcat and has the proxy_wstunnel mod
> loaded.
>
> The relevant (I think) part of my VirtualHost in the Apache2 conf
> file is like this:
>
> ProxyPass / http://127.0.0.1:8080/ #works ok
> ProxyPassReverse / http://127.0.0.1:8080/ #works ok
> ProxyPass / ws://127.0.0.1:8080/
> ProxyPassReverse / ws://127.0.0.1:8080/
>
> Could anyone tell me what's wrong here?
>
>
> Thanks.
> Richard
>
Luis & Christopher, thanks for your suggestions.
I've now got a VirtualHost that works, the key section being:
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://localhost:8080/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://localhost:8080/$1 [P,L]
taken as is from a post at stackoverflow, except that Tomcat defaults to
8080:
https://stackoverflow.com/questions/27526281/websockets-and-apache-proxy-how-to-configure-mod-proxy-wstunnel
I'd still be interested in knowing if and how this can be achieved with
ProxyPass however. I spent quite a bit of time trying to match the
protocol as well as the path in Proxy path, but if it is possible, I
couldn't get the syntax right.
Richard
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org
Re: Tomcat behind Apache web server ProxyPass settings for WebSocket
Posted by Luis Rodríguez Fernández <uo...@gmail.com>.
Hello Richard,
Yes, Christopher is right, with such configuration all the requests will be
upgraded to ws. Digging down in my old apache conf I found something like
this:
ProxyPass /WinCCOAWebUI/ui
ws://db-00032:13122/WinCCOAWebUI/ui
ProxyPassReverse /WinCCOAWebUI/ui
ws://db-00032:13122/WinCCOAWebUI/ui
ProxyPass /WinCCOAWebUI/* http
://db-00032:13122/WinCCOAWebUI/
ProxyPassReverse /WinCCOAWebUI/* http
://db-00032:13122/WinCCOAWebUI/
Well in the original configuration I was using mod_proxy for the ws request
and mod_jk for all the rest plus shibboleth for the authentication part,
but I prefer to avoid you the pain :)
Hope it helps,
Luis
El mié., 5 dic. 2018 a las 16:46, Christopher Schultz (<
chris@christopherschultz.net>) escribió:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
>
> Richard,
>
> On 12/4/18 15:00, richard@xentu.com wrote:
> > I'm trying to see the WebSocket examples that ship with Tomcat 9 in
> > action.
> >
> > If I point my browser directly at tomcat on 8080, they work.
> >
> > However, Tomcat is behind an Apache2 webserver and I can't seem to
> > get the ProxyPass settings right. Other Tomcat applications work if
> > I access them via Apache, but WebSocket applications don't. The
> > snake demo for example, gives a 'Info: WebSocket closed' message.
> >
> > Apache is on the same server as Tomcat and has the proxy_wstunnel
> > mod loaded.
> >
> > The relevant (I think) part of my VirtualHost in the Apache2 conf
> > file is like this:
> >
> > ProxyPass / http://127.0.0.1:8080/ #works ok
> > ProxyPassReverse / http://127.0.0.1:8080/ #works ok
> > ProxyPass / ws://127.0.0.1:8080/ ProxyPassReverse /
> > ws://127.0.0.1:8080/
> >
> > Could anyone tell me what's wrong here?
>
> My reading of the (umm... concise?) mod_proxy_wstunnel documentation
> is that all URLs handled by mod_proxy_wstunnel will be upgraded to
> Websocket connections. The configuration you have above will either
> completely ignore your Websocket configuration (because ProxyPass
> directives work in a first-match fashion, so your first '/' mapping
> will map to http) or (if you replaced http: with ws:), everything will
> be upgraded to Websocket so HTTP won't work.
>
> Perhaps you want to:
>
> a. List the Websocket-mapped URLs first
>
> and
>
> b. Don't map / to Websocket. Try /ws or whatever the examples use
>
> Caveat: I know almost nothing about Websocket. YMMV.
>
> - -chris
> -----BEGIN PGP SIGNATURE-----
> Comment: Using GnuPG with Thunderbird - https://www.enigmail.net/
>
> iQIzBAEBCAAdFiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAlwH8r0ACgkQHPApP6U8
> pFhE6RAAtaqxDXDLjDx+Eovt2V9PtiLPIxY8fP5uZfMtTRo7SP6acgRe45NH9qHj
> tcQt0WiJP9twIyt25oENERF2sbwOgHGLzaDLeLNCJDIER+qre/PN6pspvZzU89nO
> 1a6AdCm4aoZTGsn9GXXn4xRP/TNoAbq0FRXxjp6SUeHlGIK3wSOYGERMafZgfOm7
> ETWGP7SG+mw6+Vbp4dnwvx71uLOjgYu8ly6GcDsbe9UOqqb7PlTGtzWQWDz5ahiP
> Kks7RuVsAOIRxHN4VEoQwu5lYOHFObKOBwtCHbQYZQby3hjXBbShZTKYDEVoorwo
> jUU0LFQMPb5IBkeH009FQZJXZcS4EvzzZK3bYx/LYQFqwYcB5VAXTT/wNV4J67dS
> 59JEl0xTxAgqTvu30TIW82ymMqsKRpPiUHblcQ0YIidQVnFUqhw9eAZdKoeDlgaY
> XL3TpBhHnJgzUxgDIc7R1gj218GiyY2rK2CK4KzrbaIE7HnobWMJxcarB/57KO8F
> JKrr7k0RkaXM1zsv63dr34LFiPQH0i2hqRDFRADNsDYOSf21dP3ZFOBdd4nKe4M3
> edNXPgSIput+c5iiSECGVL1eQ2IKXfDwQkXR5Cj3v44TpYaOdlsChK27aq1uIWst
> PLUL28Q19ugIlPh1qQp/6SGc/T2r+HUGbhs+A7IQectxNzb+ywQ=
> =Dl4U
> -----END PGP SIGNATURE-----
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>
--
"Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better."
- Samuel Beckett
Re: Tomcat behind Apache web server ProxyPass settings for WebSocket
Posted by Christopher Schultz <ch...@christopherschultz.net>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Richard,
On 12/4/18 15:00, richard@xentu.com wrote:
> I'm trying to see the WebSocket examples that ship with Tomcat 9 in
> action.
>
> If I point my browser directly at tomcat on 8080, they work.
>
> However, Tomcat is behind an Apache2 webserver and I can't seem to
> get the ProxyPass settings right. Other Tomcat applications work if
> I access them via Apache, but WebSocket applications don't. The
> snake demo for example, gives a 'Info: WebSocket closed' message.
>
> Apache is on the same server as Tomcat and has the proxy_wstunnel
> mod loaded.
>
> The relevant (I think) part of my VirtualHost in the Apache2 conf
> file is like this:
>
> ProxyPass / http://127.0.0.1:8080/ #works ok
> ProxyPassReverse / http://127.0.0.1:8080/ #works ok
> ProxyPass / ws://127.0.0.1:8080/ ProxyPassReverse /
> ws://127.0.0.1:8080/
>
> Could anyone tell me what's wrong here?
My reading of the (umm... concise?) mod_proxy_wstunnel documentation
is that all URLs handled by mod_proxy_wstunnel will be upgraded to
Websocket connections. The configuration you have above will either
completely ignore your Websocket configuration (because ProxyPass
directives work in a first-match fashion, so your first '/' mapping
will map to http) or (if you replaced http: with ws:), everything will
be upgraded to Websocket so HTTP won't work.
Perhaps you want to:
a. List the Websocket-mapped URLs first
and
b. Don't map / to Websocket. Try /ws or whatever the examples use
Caveat: I know almost nothing about Websocket. YMMV.
- -chris
-----BEGIN PGP SIGNATURE-----
Comment: Using GnuPG with Thunderbird - https://www.enigmail.net/
iQIzBAEBCAAdFiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAlwH8r0ACgkQHPApP6U8
pFhE6RAAtaqxDXDLjDx+Eovt2V9PtiLPIxY8fP5uZfMtTRo7SP6acgRe45NH9qHj
tcQt0WiJP9twIyt25oENERF2sbwOgHGLzaDLeLNCJDIER+qre/PN6pspvZzU89nO
1a6AdCm4aoZTGsn9GXXn4xRP/TNoAbq0FRXxjp6SUeHlGIK3wSOYGERMafZgfOm7
ETWGP7SG+mw6+Vbp4dnwvx71uLOjgYu8ly6GcDsbe9UOqqb7PlTGtzWQWDz5ahiP
Kks7RuVsAOIRxHN4VEoQwu5lYOHFObKOBwtCHbQYZQby3hjXBbShZTKYDEVoorwo
jUU0LFQMPb5IBkeH009FQZJXZcS4EvzzZK3bYx/LYQFqwYcB5VAXTT/wNV4J67dS
59JEl0xTxAgqTvu30TIW82ymMqsKRpPiUHblcQ0YIidQVnFUqhw9eAZdKoeDlgaY
XL3TpBhHnJgzUxgDIc7R1gj218GiyY2rK2CK4KzrbaIE7HnobWMJxcarB/57KO8F
JKrr7k0RkaXM1zsv63dr34LFiPQH0i2hqRDFRADNsDYOSf21dP3ZFOBdd4nKe4M3
edNXPgSIput+c5iiSECGVL1eQ2IKXfDwQkXR5Cj3v44TpYaOdlsChK27aq1uIWst
PLUL28Q19ugIlPh1qQp/6SGc/T2r+HUGbhs+A7IQectxNzb+ywQ=
=Dl4U
-----END PGP SIGNATURE-----
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org