本文使用 http proxy 方式 实现 apache 支持 WebSocket 请求(JK 使用的 ajp 协议不能支持websocket)
关于 http proxy 方式 请参考:http://blog.csdn.NET/conquer0715/article/details/42043411
通过 apache 访问 后端 tomcat上的 websocket 服务,需要使用 mod_proxy.so 和 mod_proxy_wstunnel.so两个库文件(在apache2.4 安装目录下已存在,放开httpd.conf文件中的注释即可使用),如果应用中需要通过http协议访问某些页面(如index页面)则需要添加使用 mod_proxy_http.so,如下:
- LoadModule proxy_module modules/mod_proxy.so
- LoadModule proxy_http_module modules/mod_proxy_http.so
- LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
- 最后面添加:
- ProxyPass /web/websocket/ ws://l:8080/web/websocket/
- ProxyPass / http://127.0.0.1:8080/
我的apache端口使用的是 7000,所以访问 http://127.0.0.1:7000/web/ 就出现了 index.html首页(此次访问不是websocket,所以需要开启mod_proxy_http.so,如果不需要可以关闭加载mod_proxy_http.so)
我的应用中配置的 websocket服务都在 web/websocket/ 下面,所以配置了映射,对于其它所有映射如 “/” 需要配置到 web/websocket/ 映射的后面,否则 web/websocket/ 的映射会被当做http协议处理。
注意: WebSocket 负载均衡 没有 亲和/非亲和 概念!!!