Apache反向代理

时间:2015-05-20 17:56:18

标签: websocket apache2 virtualhost reverse-proxy mod-proxy

我将Apache设置为将Web套接字请求反向代理到JVM服务器。有时他们工作。有时(很少,但有时)他们不起作用。这有heisenbug的标志。

客户:

socket = new WebSocket("ws://example.com/socket/xyz");
socket.onmessage = function(item) {});

有时这很有效。有时却没有。如果没有,我会收到错误:

WebSocket connection to 'ws://example.com/websocket' failed:
Error during WebSocket handshake: Invalid status line

Chrome调试控制台打开时,此功能始终有效。它有时会失败。

我的Apache配置很少:

<VirtualHost *:80>
  ServerName      example.com
  AllowEncodedSlashes On
  ErrorLog         /var/log/apache2/example
  TransferLog      /var/log/apache2/example
  UseCanonicalName On

  ProxyRequests Off
  ProxyPreserveHost On
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  ProxyPass        /socket/ ws://upstream.host/socket/
  ProxyPassReverse /socket/ ws://upstream.host/socket/
  ProxyPass        / http://upstream.host/
  ProxyPassReverse / http://upstream.host/
  <Location />
    Order allow,deny
    Allow from all
  </Location>
</VirtualHost>

所以我无法进入网络检查员,看看发生了什么。没有让Wireshark参与进来,我有点卡住了。

我在Apache错误日志中看不到任何错误。

我在应用程序日志中看不到任何错误。

我唯一想到的是,Chrone开发者控制台正在阻止某种竞争条件,但我想不出是什么。

我正在使用服务器上的HTTP-Kit库和客户端上的React.js。我想它是proxy_wstunnel在Apache2中完成工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我遇到了来自Apache(v2.4.6)的代理传递模块的同样问题,同时有三个,四个连接按预期工作,但是每秒有多次请求失败。似乎该模块仍然是一个小小的车。

也许不能直接解决你的问题,但我转而HAProxy,现在一切都运转良好。