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

最近在测试自己的一个构想,一个宇宙模型。因为需要频繁和后台交互数据,于是想上websocket。用tornado搭建了服务后端,还需要Apache配合进行反向代理,查了一下,有个mod_proxy_wstunnel模块可以做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

欧了

Show Comments