2013-01-22 42 views
18

我一直在使用websockets的Perl Mojolicious項目。我想在運行apache的共享服務器上啓動它,並使用proxyPass和proxyPassReverse使我的Mojolicious代碼與Hypnotoad一起運行更漂亮。Apache proxyPassReverse和Websockets

我把它設置如下。

Apache網址:

mydomain.com 

Hypnotoad網址:

mydomain.com:8080 

用下面的Apache進入我可以反向代理的Hypnotoad服務器

project.mydomain.com 

的apache.conf進入

<VirtualHost *:80> 
    ServerName project.mydomain.com 
    DocumentRoot /var/www/project 
    <Directory /var/www/project/> 
    Options Indexes FollowSymLinks MultiViews 
    AllowOverride None 
    Order allow,deny 
    allow from all 
    </Directory> 
    ProxyRequests Off 
    ProxyPreserveHost On 
    ProxyPass/http://mydomain.com:8080/ keepalive=On 
    ProxyPassReverse/http://mydomain.com:8080/ 
    RequestHeader set X-Forwarded-HTTPS "0" 
</VirtualHost> 

但是我的WebSocket請求給一個404錯誤,當我使用:

ws://project.mydomain.com/get-data 

和一個302錯誤,當我使用:

ws://mydomain.com:8080/get-data 

我想這不會是一個問題WebSocket的沒有檢查身份驗證,但他們使用Mojolicious路線來檢查您是否可以通過websocket進行發佈。

從我能看到的Apache不支持反向代理websockets。在apache/httpd conf文件中。

有沒有人找到一個可用的解決方案,這使用Apache是​​穩定的生產環境?

回答

15

三月a patch was committed to the Apache trunk由吉姆·賈吉爾斯基允許WebSockets向正確代理。該補丁添加了一個名爲proxy_wstunnel的新子模塊,其中allows mod_proxy to work with the "ws" and "wss" protocols

該模塊還沒有任何官方的Apache的版本(如2013年6月8日的),所以你需要自己編譯。 Voyageur's blog描述過程的Apache 2.2,但它應該爲Apache 2.4

+0

@ user1439590你應該接受這個作爲答案 – lkraav

15

的Apache httpd的2.4.6包括代理的WebSocket請求。

+6

這將是更適合評論,而不是答案。一旦你[有足夠的聲譽](http://stackoverflow.com/help/privileges/comment),請考慮將其轉移到對該問題的評論。 –

+3

@SameerSingh我認爲這完全是由問題的答案,由補丁的提交者。 – iwein