2016-09-15 99 views
1

我在Apache Web服务器后面运行我的Apache Zeppelin实例,其中的web服务器仅用作预留代理服务器。Apache反向代理服务器后面的Apache Zeppelin

如果我正在浏览反向代理网站https://my-domain.com/zeppelin/我收到了一个包含资产和按钮以及所有内容的网站,但Zeppelin的websocket将无法连接。 Browser-Dev-Tools在说405 HTTP method GET is not supported by this URL为URL https://my-domain.com/zeppelin/ws

如果我要直接在Zeppelin网站上(f.e. 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-位置。 你有什么想法吗?

EDIT FOR SOLUTION:在下面的答案后,我修改了我的conf文件,现在它正在工作!非常感谢你!

我工作的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> 

回答

2

这是我使用的有一些指定不一定适用于您的需求的conf:
- 每一个实例 - 在mesos集群
前服务发现用户和路由基于证书的用户

<VirtualHost *:3128> 
    <Location "/"> 
     AuthUserFile /.............../users 
     AuthName "xxxxxxxxxxxxx" 
     AuthGroupFile /dev/null 
     AuthType Basic 
     Require valid-user 
    </Location> 
    ServerName xxxxxxxxxxxxxxxxxxxxxxxxxxx 
    # SSLEngine on 
    # SSLCertificateFile "/.............../xxxxx.crt" 
    # SSLCertificateKeyFile "/.............../xxxxx.key" 

    #RewriteRules for datalab with user 
    RewriteCond %{HTTP:Upgrade} =WebSocket [NC,NV] 
    RewriteCond %{LA-U:REMOTE_USER} (aaaa) 
    RewriteRule ^/(.*) ws://azerty01:31321/$1 [P] 
    RewriteCond %{LA-U:REMOTE_USER} (aaaa) 
    RewriteRule ^/(.*) http://azerty01:31321/$1 [P,QSA,L] 
    ProxyPassReverse/http://azerty01:31321 

    #RewriteRules for datalab with user 
    RewriteCond %{HTTP:Upgrade} =WebSocket [NC,NV] 
    RewriteCond %{LA-U:REMOTE_USER} (bbbb) 
    RewriteRule ^/(.*) ws://azerty02:31901/$1 [P] 
    RewriteCond %{LA-U:REMOTE_USER} (bbbb) 
    RewriteRule ^/(.*) http://azerty02:31901/$1 [P,QSA,L] 
    ProxyPassReverse/http://azerty02:31901 

</VirtualHost> 
+0

谢谢,它现在工作!查看我编辑的简化Rewrite-Part无用户身份验证。 – BeerCamper

1

这里是一个包括我时,我想反向代理0创建的文件Zeppelin服务器。如果您愿意,您可以或多或少地将其剪切并粘贴到虚拟主机conf文件中。

# 
# Apache Reverse Proxy settings for Zeppelin server. 
# note: 
# Change ZEPPELING_IP_OR_HOST and ZEPPELIN_PORT as appropriate. 
# 
# FreeBSD put into /usr/local/etc/apache24/Includes directory, 
# Linux may vary. 

# This is for your-host.your-domain.com/zeppelin 
# if you want zeppelin.your-host.your-domain.com 
# Put this into a vhosts file. 

RequestHeader set X_FORWARDED_PROTO 'https' 
ProxyPreserveHost On 
RequestHeader set X-Forwarded-Port "443" 
ProxyRequests  Off 
ProxyVia Off 
AllowEncodedSlashes NoDecode 


<Location /zeppelin/ws> 
    ProxyPass ws://ZEPPELIN_IP_OR_HOST:ZEPPELIN_PORT/zeppelin/ws 
    ProxyPassReverse ws://ZEPPELIN_IP_OR_HOST:ZEPPELIN_PORT/zeppenlin/ws 
</Location> 

ProxyPass  /zeppelin  http://ZEPPELIN_IP_OR_HOST:ZEPPELIN_PORT/zeppelin 
ProxyPassReverse /zeppelin  http://ZEPPELIN_IP_OR_HOST:ZEPPELIN_PORT/zeppelin 
0

我想补充这一点,我能够Apache2中使用下面的配置重新路由到我的飞艇实例。重要的部分是websocket连接。

请务必添加

sudo a2enmod proxy_wstunnel 

到MODS的。然后我跑了以下内容:

sudo a2dissite 000-default 
sudo nano /etc/apache2/sites-available/proxy-host.conf 
    # Insert the following into the proxy-host.conf file 
    <VirtualHost *:80> 
     ServerName '<Zeppelin Public IP>:8080' 
     RewriteEngine On 
     RewriteCond %{HTTP:Upgrade} =websocket [NC] 
     RewriteRule /(.*)   ws://<Zeppelin Public IP>:8080/$1 [P,L] 
     RewriteCond %{HTTP:Upgrade} !=websocket [NC] 
    RewriteRule /(.*)   http://<Zeppelin Public IP>:8080/$1 [P,L] 
    ProxyPassReverse/http://<Zeppelin Public IP>:8080/ 
    </VirtualHost> 
    #/text insert 
sudo a2ensite proxy-host 
sudo nano /etc/apache2/ports.conf 
    #Add this to the ports.conf file and cntrl+X to save & exit 
    Listen 8080 
sudo /etc/init.d/apache2 restart 

然后,当你去到http:// reverseproxypublicIP /它会重新路由到您的齐柏林实例。希望这可以帮助别人!