2013-01-22 25 views
18

Pracowałem nad projektem Perl Mojolicious, który korzysta z websockets. Chcę go uruchomić na współdzielonym serwerze z uruchomionym apache i użyć proxyPass i proxyPassReverse, aby url ładniejszy dla mojego Mojolicious kod uruchomiony z Hypnotoad.Apache proxyPassReverse and Websockets

Mam to ustawione w następujący sposób.

Apache URL:

mydomain.com 

Hypnotoad url:

mydomain.com:8080 

z następującymi apache wpisu mogę reverse proxy serwer HYPNOTOAD do

project.mydomain.com 

wejściowej 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> 

Jednak moje prośby websocket daje błąd 404, gdy używam:

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

i 302 error kiedy używam:

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

myślę, że to nie byłoby problemu jest websocket nie sprawdzają uwierzytelnienia, ale używają Mojolicious routes, aby sprawdzić, czy możesz publikować za pośrednictwem websocket.

Z tego, co widzę, Apache nie obsługuje wstecznych proxy websockets. W plikach conf apache/httpd.

Czy ktoś znalazł użyteczne rozwiązanie tego przy użyciu Apache, który jest stabilny dla środowiska produkcyjnego?

Odpowiedz

15

W marcu a patch was committed to the Apache trunk Jim Jagielskiego, który pozwala WebSockets być przekierowywane poprawnie. Ta poprawka dodaje nowy moduł pod nazwą proxy_wstunnel który jest allows mod_proxy to work with the "ws" and "wss" protocols.

Moduł nie jest jeszcze w żadnych oficjalnych wydań Apache (od 8 czerwca 2013), więc trzeba będzie go skompilować samodzielnie. Voyageur's blog opisuje proces dla Apache 2.2, ale powinno być łatwiejsze dla Apache 2.4

+0

@ user1439590 należy przyjąć to jako odpowiedź – lkraav

15

Apache httpd 2.4.6 zawiera żądania proxy websocket.

+6

Byłoby to bardziej nadaje się do komentarza, a nie odpowiedź. Gdy już uzyskasz wystarczającą reputację (http://stackoverflow.com/help/privileges/comment), rozważ przeniesienie tego komentarza do komentarza. –

+3

@SameerSingh Myślę, że jest to _naakie_ odpowiedź na to pytanie, przez sprawcę łaty. – iwein