使用 apache 网络服务器代理到 apache tomcat
Using apache web server proxy to apache tomcat
根据 apaches 文档,wstunnel 是在 2.4 中添加的,我应该能够路由流量。
我有以下设置
Apache tomcat 运行 在 8081 和 8444 上。
有静态文件 (html/js) 以及 groovy/grails (war) 文件从 Tomcat
提供
我代理了 8081 <- 80
和 8444 <- 443
意思是我可以去 http://domain/app
看看我必须去 http://domain:8081/app
才能看到的东西。 [这工作得很好]
但是,在静态 javascript/html 页面中,有一个使用 websocket 返回到 tomcat 的连接。我的应用程序尝试连接回名为 inf
的应用程序,但失败了。
这个proxy/connection失败了。
我在日志中看到 httpd (apache) 无法为 /inf/stomp/getInfo
找到正确的协议,即 url 到后端的 websocket
我已尝试关注 this posts notes as well as proper ordering mentioned in this post
httpd.conf
Listen 443
ServerName mydomain
<VirtualHost *:443>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLEngine On
SSLProxyEngine On
SSLCertificateFile /etc/httpd/ssl/ssl.crt
SSLCertificateKeyFile /etc/httpd/ssl/ssl.key
RequestHeader set Front-End-Https "On"
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
LogLevel debug
ProxyPass /mainView https://mydomain:8443/mainView
ProxyPassReverse /mainView https://mydomain:8443/mainView
ProxyPass /cas https://mydomain:8443/cas
ProxyPassReverse /cas https://mydomain:8443/cas
# <not working as it should>
ProxyPass /inf/ ws://mydomain:8081/inf/
ProxyPassReverse /inf/ ws://mydomain:8081/inf/
# </not working as it should>
ProxyPass /inf/ wss://mydomain:8444/inf/
ProxyPassReverse /inf/ wss://mydomain:8444/inf/
ProxyPass /inf-app https://mydomain:8444/
ProxyPassReverse /inf-app https://mydomain:8444/
</VirtualHost>
你知道你有两个:ProxyPass /inf/ 块,如果你同时拥有安全和不安全的 virtualHost,你需要移动 ws: 版本到端口 80 虚拟主机。在
上还有一个重复的 SSLProxyEngine
关于解决您的问题,请参阅:tunneling secure websocket connections with apache,尤其是:--enable-proxy_wstunnel=shared text
根据 apaches 文档,wstunnel 是在 2.4 中添加的,我应该能够路由流量。
我有以下设置
Apache tomcat 运行 在 8081 和 8444 上。
有静态文件 (html/js) 以及 groovy/grails (war) 文件从 Tomcat
提供我代理了 8081 <- 80
和 8444 <- 443
意思是我可以去 http://domain/app
看看我必须去 http://domain:8081/app
才能看到的东西。 [这工作得很好]
但是,在静态 javascript/html 页面中,有一个使用 websocket 返回到 tomcat 的连接。我的应用程序尝试连接回名为 inf
的应用程序,但失败了。
这个proxy/connection失败了。
我在日志中看到 httpd (apache) 无法为 /inf/stomp/getInfo
找到正确的协议,即 url 到后端的 websocket
我已尝试关注 this posts notes as well as proper ordering mentioned in this post
httpd.conf
Listen 443
ServerName mydomain
<VirtualHost *:443>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLEngine On
SSLProxyEngine On
SSLCertificateFile /etc/httpd/ssl/ssl.crt
SSLCertificateKeyFile /etc/httpd/ssl/ssl.key
RequestHeader set Front-End-Https "On"
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
LogLevel debug
ProxyPass /mainView https://mydomain:8443/mainView
ProxyPassReverse /mainView https://mydomain:8443/mainView
ProxyPass /cas https://mydomain:8443/cas
ProxyPassReverse /cas https://mydomain:8443/cas
# <not working as it should>
ProxyPass /inf/ ws://mydomain:8081/inf/
ProxyPassReverse /inf/ ws://mydomain:8081/inf/
# </not working as it should>
ProxyPass /inf/ wss://mydomain:8444/inf/
ProxyPassReverse /inf/ wss://mydomain:8444/inf/
ProxyPass /inf-app https://mydomain:8444/
ProxyPassReverse /inf-app https://mydomain:8444/
</VirtualHost>
你知道你有两个:ProxyPass /inf/ 块,如果你同时拥有安全和不安全的 virtualHost,你需要移动 ws: 版本到端口 80 虚拟主机。在
上还有一个重复的 SSLProxyEngine关于解决您的问题,请参阅:tunneling secure websocket connections with apache,尤其是:--enable-proxy_wstunnel=shared text