解决v2ray在Nginx+WS+TLS模式下websocket连接每60秒自动断开的问题

st 发布于 2022-09-21 1,789 次阅读


websocket断开现象

这个问题其实已经在我的setup中存在很久了,只是我从来没怎么在意,也几乎不会影响日常使用。

具体表现为,通过客户端连接v2ray的过程中一切正常,但如果有一个websocket连接60秒没有通信,就会被强制断开。

个人使用中,主要受到影响的是ssh客户端和Twitch,ssh客户端的现象是如果一分钟没有操作,session就会断开,但是比较容易解决,只需要在客户端设置一个keepalive即可。Twitch受到的影响比较大,chat如果没有新的消息,每分钟都会自动断开然后重连,一方面会有重连信息很麻烦,同时也可能丢消息。

解决方案

经过排错发现该问题的原因在于Nginx反代默认60秒切断没有通信的websocket连接,在http块或者location块内加上

    proxy_read_timeout 3600;
    proxy_send_timeout 3600;

即可防止Nginx切断websocket连接。

关于xrayr

在测试过程中,通过脚本直接安装的v2ray在修改Nginx配置之后就不再断开websocket连接,但通过xrayr运行的v2ray依旧断开,需要在xrayr配置中增加ConnIdle选项的时间。

另外如果发现修改ConnIdle没有生效,可以参考这个issue,xrayr默认的配置文件有typo,ConnectionConfig少了一个c。

Sup
最后更新于 2023-09-05