NodeJS应用需要独立占用一个端口来提供服务,为了对外统一使用80端口,我们需要使用反向代理的方法来将80端口转发到各种内部端口上,而某些即时通讯功能会用到socket.io接口的WebSocket协议来与后台进行通信,除了对HTTP协议代理外,还需要额外配置WS协议的代理。
配置MOD
1 2 3 |
a2enmod proxy a2enmod proxy_wstunnel service apache2 restart |
配置CONF
在chrome的Console里查看ws链接的格式为
1 |
ws://domain.com/socket.io |
HTTP
以下4-7行为WS协议的额外配置,其余为HTTP协议配置(假定服务端口为5000)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<VirtualHost *:80> ServerName www.domain.com RewriteEngine On RewriteCond %{REQUEST_URI} ^/socket.io [NC] RewriteCond %{QUERY_STRING} transport=websocket [NC] RewriteRule /(.*) ws://localhost:5000/$1 [P,L] ProxyRequests Off ProxyMaxForwards 100 ProxyPreserveHost On ProxyPass / http://localhost:5000/ ProxyPassReverse / http://localhost:5000/ </VirtualHost> |
HTTPS
以下为wss加密WebSocket协议反向代理配置,其中,与http不同之处在于所有协议都要改成https和wss,以及端口也要改成对应的加密端口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName www.domain.com RewriteEngine On RewriteCond %{REQUEST_URI} ^/socket.io [NC] RewriteCond %{QUERY_STRING} transport=websocket [NC] RewriteRule /(.*) wss://localhost:5001/$1 [P,L] ProxyRequests Off ProxyMaxForwards 100 ProxyPreserveHost On ProxyPass / https://localhost:5001/ ProxyPassReverse / https://localhost:5001/ </IfModule> </VirtualHost> </IfModule> |
There are no comments yet