Total Pageviews

Wednesday, 11 October 2017

关于使用mod_proxy_wstunnel时,偶尔不能正常连接的问题解决

因为需要频繁和后台交互数据,于是想上websocket。用tornado搭建了服务后端,还需要Apache配合进行反向代理,查了一下,有个modproxywstunnel模块可以做ws的反向代理,配置起来也比较简单
ProxyPass "/ws2/"  "ws://echo.websocket.org/"  
ProxyPass "/wss2/" "wss://echo.websocket.org/"  
上了模块后,出现Safari偶尔(或者说,比较频繁的)出现错误status line does not end with crlf。查看apache的日志,发现错误码500。于是放狗搜索,发现了一个bug。原因基本上是因为apache复用了之前建立的连接,导致再次使用该连接握手时,出现了错误。解决方案有两个:
  • (未测试)在ProxyPass指令后面追加disablereuse=on
  • 升级Apache2到2.4.10以上。
我采用了后一种方案,但是我的主机是Ubuntu 14.04,源里面的Apache2的版本只到2.4.7,于是只能使用一个PPA解决
sudo add-apt-repository ppa:ondrej/apache2  
sudo apt-get update  
sudo apt-get --only-upgrade install apache2  
sudo service apache2 restart  
欧了.

No comments:

Post a Comment