Apache 443端口WebSocket每分钟断开,如何配置避免超时?
解决Apache反向代理WebSocket的超时断开问题
你的问题是Apache反向代理WebSocket时,默认代理超时时间为60秒,导致客户端每分钟被迫断连重连。本地直连后端服务无此问题,说明问题出在Apache的代理超时配置上,以下是具体修改方案:
需要添加的关键配置项
在虚拟主机配置中,新增针对长连接的超时设置:
ProxyTimeout 3600:设置代理连接的超时时间(示例为1小时,可根据需求调整),覆盖默认的60秒超时ProxyWebsocketFallbackToProxyHttp Off:禁止WebSocket连接降级为HTTP,确保长连接稳定性Timeout 3600:全局请求超时时间,与ProxyTimeout配合保障长连接不被强制断开KeepAlive On+KeepAliveTimeout 3600:开启长连接并设置超时时间,维持客户端与Apache的连接
修改后的完整虚拟主机配置
<IfModule mod_ssl.c> <VirtualHost *:443> DocumentRoot "/var/www/html" ServerName mydomain.com # 新增长连接与超时配置 KeepAlive On KeepAliveTimeout 3600 Timeout 3600 ProxyTimeout 3600 ProxyWebsocketFallbackToProxyHttp Off SSLEngine on SSLProxyEngine on SSLProtocol -all -SSLv1 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 SSLCipherSuite HIGH:aNULL:eNULL:EXPORT:DES:RC3:!MD5:!PSK:!SRP:!CAMELLIA <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> RewriteEngine On RewriteCond %{HTTP:Upgrade} =websocket [NC] RewriteRule /(.*) ws://localhost:5122/$1 [P,L] </VirtualHost> </IfModule>
配置说明
ProxyTimeout:专门控制Apache与后端WebSocket服务之间的连接超时,必须设置足够大的值避免主动断开ProxyWebsocketFallbackToProxyHttp Off:防止WebSocket连接出现短暂波动时,Apache自动切换到HTTP协议,导致长连接失效Timeout:设置Apache处理所有请求的最大超时时间,确保不会提前终止WebSocket连接KeepAlive相关配置:维持客户端与Apache之间的TCP长连接,减少重复握手开销,同时避免连接被过早回收
修改完成后,重启Apache服务生效:
sudo systemctl restart apache2
内容的提问来源于stack exchange,提问作者mana
相关产品推荐
相关产品推荐

