node.js ist nett. Vor allem, wenn man auf WebRTC/Sockets setzt. Komplex wird es, wenn man das ganze hinter einem Apache betreibt. Habe jetzt 2h damit verbracht die WS irgendwie an den internen node prozess weiterzuleiten, ohne dass socket.io sich verschluckt. Damit nicht der Nächste vor dem selben Problemchen steht und Stunden versenkt, hier der relevante Teil der apache-conf:
Annahmen:
- Der interne node.js-prozess horcht auf Port 6543
- Alles was Websocket ist, wird via /socket.io abgewickelt und hat auch den Transportheader auf “websocket”
<IfModule mod_proxy.c>
RewriteEngine On
ProxyVia On
ProxyRequests Off
ProxyPreserveHost on
RewriteCond %{REQUEST_URI} ^/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://internal.etherpad.ip:6543/$1 [P,L]
ProxyPassReverse /socket.io ws://internal.etherpad.ip:6543/socket.io
RewriteCond %{REQUEST_URI} !^/p/
RewriteCond %{REQUEST_URI} !^/static/
RewriteCond %{REQUEST_URI} !^/ep/
RewriteCond %{REQUEST_URI} !^/minified/
RewriteCond %{REQUEST_URI} !^/api/
RewriteCond %{REQUEST_URI} !^/ro/
RewriteCond %{REQUEST_URI} !^/error/
RewriteCond %{REQUEST_URI} !^/jserror
RewriteCond %{REQUEST_URI} !/favicon.ico
RewriteCond %{REQUEST_URI} !/robots.txt
ProxyPass / http://internal.etherpad.ip:6543/
ProxyPassReverse / http://internal.etherpad.ip:6543/
<Proxy *>
Options +FollowSymLinks -MultiViews
AllowOverride All
Order allow,deny
allow from all
<Proxy>
<IfModule>