2013-01-22 15 views
18

Ho lavorato a un progetto Perl Mojolicious che utilizza websocket. Sto volendo lanciarlo su un server condiviso che esegue apache e usare proxyPass e proxyPassReverse per rendere l'url più carino per il mio codice Mojolicious in esecuzione con Hypnotoad.Apache proxyPassReverse e Websockets

L'ho configurato come segue.

Apache url:

mydomain.com 

Hypnotoad url:

mydomain.com:8080 

Con la seguente voce apache posso proxy inverso server Hypnotoad a

project.mydomain.com 

ingresso 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> 

Tuttavia le mie richieste websocket danno un errore 404 quando uso:

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

e un errore 302 quando uso:

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

Credo che questo non sarebbe un problema è la websocket non ha controllato l'autenticazione, ma usa percorsi Mojolicious per verificare che sia possibile postare tramite la websocket.

Da quello che posso vedere Apache non supporta le web socket socket proxy. Nei file apache/httpd conf.

Qualcuno ha trovato una soluzione utilizzabile con Apache che è stabile per un ambiente di produzione?

risposta

15

In marzo a patch was committed to the Apache trunk di Jim Jagielski che consente di eseguire correttamente proxy websockets. La patch aggiunge un nuovo sottomodulo chiamato proxy_wstunnel che allows mod_proxy to work with the "ws" and "wss" protocols.

Il modulo non è ancora in nessuna versione ufficiale di Apache (a partire dall'8 giugno 2013), quindi è necessario compilarlo da soli. Voyageur's blog descrive il processo per Apache 2.2, ma dovrebbe essere più semplice per Apache 2.4

+0

@ user1439590 si dovrebbe accettare come risposta – lkraav

15

Apache httpd 2.4.6 include il proxy delle richieste di websocket.

+6

Questo sarebbe più adatto a un commento piuttosto che a una risposta. Una volta che [hai abbastanza reputazione] (http://stackoverflow.com/help/privileges/comment), ti preghiamo di considerare di trasferirlo a un commento sulla domanda. –

+3

@SameerSingh Penso che questa sia esattamente la risposta alla domanda, dal committer della patch. – iwein