最近打算正式使用websocket,须要作负载,而使用的是apache http server,捣腾了一天找到了一种比较靠谱的方式,特此记录一下。web
加载的模块以下:express
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_express_module modules/mod_proxy_express.soapache
不排除有遗漏,由于我这边所有加载的,只去除了几个不须要的。websocket
conf/http.conf中须要加入或者删除注释:session
Include conf/extra/httpd-vhosts.conf
conf/extra/httpd-vhosts.conf配置:socket
<VirtualHost *:8088> ServerAdmin webmaster@dummy-host.bigdata.com ServerName localhost ErrorLog "logs/bigdata.com-error_log" CustomLog "logs/bigdata.com-access_log" common ProxyRequests Off Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED # websocket RewriteEngine On RewriteCond %{HTTP:Connection} Upgrade [NC] RewriteCond %{HTTP:Upgrade} websocket [NC] RewriteRule /(.*) balancer://proxy2/$1 [P,QSA,L] Proxypass /bigdata balancer://proxy #stickysession=JSESSIONID|jsessionid nofailover=On ProxyPassReverse /bigdata balancer://proxy #ProxyPassReverseCookiePath /bigdata /bigdata <Proxy balancer://proxy2> Order Deny,Allow Allow from all RequestHeader set Connection "Upgrade" RequestHeader set Upgrade "websocket" BalancerMember ws://10.214.136.181:8080 loadfactor=2 route=work89 BalancerMember ws://10.214.136.180:8080 loadfactor=1 route=work90 ProxySet stickysession=ROUTEID </Proxy> <Proxy balancer://proxy> Order Deny,Allow Allow from all BalancerMember http://10.214.136.180:8080/bigdata loadfactor=2 route=work89 BalancerMember http://10.214.136.180:8080/bigdata loadfactor=1 route=work90 ProxySet stickysession=ROUTEID </Proxy> </VirtualHost>
根据头信息是不是websocket来重写url。url