我一直在使用Apache作为我的Socket.io服务器的负载平衡器。 我经历了以下的话题,现在一切似乎都没有问题。
为Socket.IO 1.0configurationApache 2.4 mod_proxy_wstunnel
我使用以下configurationconfiguration了Apache,现在连接正在升级到WebSocket。 但是当我尝试为以下configuration启用粘性会话时,似乎有时候apache将路由升级请求路由到路由#2,同时在路由#1上build立轮询。 发生这种情况时,升级失败,websocket未连接。 因为我们必须使用平衡器(一个用于http,一个用于ws),所以我想也许http路由#1设置的cookie不能被ws路由访问,这就是为什么会话在http和ws之间不粘连的原因。
我使用的是Apache 2.4.9
<VirtualHost *:8080> Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED ProxyRequests off ServerName localhost <Proxy balancer://http-localhost/> BalancerMember http://localhost:8081 route=1 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900 BalancerMember http://localhost:8082 route=2 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900 ProxySet lbmethod=byrequests ProxySet stickysession=ROUTEID </Proxy> <Proxy balancer://ws-localhost/> BalancerMember ws://localhost:8081 route=1 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900 BalancerMember ws://localhost:8082 route=2 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900 ProxySet lbmethod=byrequests ProxySet stickysession=ROUTEID </Proxy> RewriteEngine On RewriteCond %{REQUEST_URI} ^/socket.io [NC] RewriteCond %{QUERY_STRING} transport=websocket [NC] RewriteRule /(.*) balancer://ws-localhost/$1 [P,L] ProxyPass /socket.io balancer://http-localhost/socket.io ProxyPassReverse /socket.io balancer://http-localhost/socket.io </VirtualHost>