我正在尝试通过Apache 2.4.7(运行在Ubuntu上)代理一个WebSocket。连接正确建立,但如果浏览器或服务器在一段时间(几分钟)内没有相互发送数据,来自服务器的新消息就不会传递到浏览器。
此外,浏览器或服务器上的服务似乎都没有意识到连接以某种方式中断(它们根本没有抛出任何错误)。
如何配置服务器以避免此问题?
这是我的配置:
ProxyRequests Off
ProxyPass /somepath ws://127.0.0.1:6080/ retry=60 keepalive=On timeout=9999 ttl=9999
ProxyPassReverse /somepath ws://127.0.0.1:6080/ retry=60
2条答案
按热度按时间woobm2wo1#
我遇到了同样的问题,通过将
ProxyWebsocketIdleTimeout
的值配置为300(秒),解决了这个问题。https://httpd.apache.org/docs/trunk/mod/mod_proxy_wstunnel.html您的套接字应该有一个keepalive消息。我的套接字每隔30秒就有一个keepalive消息,但是连接断开了,因为我的ProxyWebsocketIdleTimeout指令明显少于30秒。我将其设置为300秒(5分钟),这样问题就解决了。
5t7ly7z52#
我也遇到了同样的问题,似乎Apache要处理websockets,你需要使用
a2enmod proxy_wstunnel
安装代理websockets模块。作为先决条件,还应使用以下命令安装proxy和proxy_http模块:
a2enmod proxy
和a2enmod proxy_http
中的一个或多个。