【发布时间】:2017-01-23 19:36:45
【问题描述】:
我在 Apache 网络服务器后面运行我的 Apache Zeppelin 实例,其中网络服务器仅用作保留代理。
如果我正在浏览反向代理站点https://my-domain.com/zeppelin/,我将获得一个包含资产和按钮以及所有内容的网站,但 Zeppelin 的 websocket 将无法连接。 Browser-Dev-Tools 对 URL https://my-domain.com/zeppelin/ws 说 405 HTTP method GET is not supported by this URL。
如果我直接访问 Zeppelin 网站(例如 http://priv.my-domain.com/zeppelin),一切正常。所以看起来这不是 Zeppelin-Code 中的错误,而是反向代理配置中的问题。
我的 Apache 反向代理配置如下:
<VirtualHost *:443>
ServerName my-domain.com
# don't loose time with IP address lookups
HostnameLookups Off
ProxyRequests Off
ProxyPreserveHost Off
SSLEngine On
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
...
ssl cert stuff
...
<Location /zeppelin/ws>
ProxyPass ws://priv.my-domain.com:8080/zeppelin/ws
ProxyPassReverse ws://priv.my-domain.com:8080/zeppelin/ws
Order deny,allow
Deny from all
Allow from <my-ip>
</Location>
<Location /zeppelin/>
ProxyPass http://priv.my-domain.com:8080/zeppelin/
ProxyPassReverse http://priv.my-domain.com:8080/zeppelin/
Order deny,allow
Deny from all
Allow from <my-ip>
</Location>
<Proxy *>
AddDefaultCharset Off
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
如果我从配置中删除第一个 ws-location 没有区别。 你有什么想法吗?
编辑解决方案:在下面的答案之后,我修改了我的 conf 文件,它现在可以工作了!非常感谢!
我的工作会议:
<VirtualHost *:443>
ServerName my-domain.com
# don't loose time with IP address lookups
HostnameLookups Off
ProxyRequests Off
ProxyPreserveHost Off
SSLEngine On
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
...
ssl cert stuff
...
<Location /zeppelin/>
ProxyPass http://priv.my-domain.com:8080/zeppelin/
ProxyPassReverse http://priv.my-domain.com:8080/zeppelin/
Order deny,allow
Deny from all
Allow from <my-ip>
</Location>
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =WebSocket [NC,NV]
RewriteRule ^/(.*) ws://priv.my-domain.com:8080/$1 [P]
<Proxy *>
AddDefaultCharset Off
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
【问题讨论】:
标签: apache websocket reverse-proxy apache-zeppelin