PHP多线程-stream_socket_client HTTP 499 解决方案

最近由于某些原因,需要搬迁服务器,同时也更换了服务器面板,因此遇到这个问题。(其实说白了就是服务器到期,宝塔面板太贵,都要花钱,现在做站又不赚钱)使用新的面板,某些功能免费了,开启了网站防火墙和文件保护,但是部分插件在这种情况下无法运行,没办法,只能先给文件目录开个白名单解决了一部分的插件使用问题。随后,一个定时执行任务的插件始终无法正常使用,因为使用了PHP的异步多线程访问的方式。无论怎么设置防火墙和文件保护,均无法解决这个问题。但是主动访问确可以正常运行。最后检查发现:Http状态码499(

最近由于某些原因,需要搬迁服务器,同时也更换了服务器面板,因此遇到这个问题。

(其实说白了就是服务器到期,宝塔面板太贵,都要花钱,现在做站又不赚钱)


image.png


使用新的面板,某些功能免费了,开启了网站防火墙和文件保护,但是部分插件在这种情况下无法运行,没办法,只能先给文件目录开个白名单


解决了一部分的插件使用问题。


随后,一个定时执行任务的插件始终无法正常使用,因为使用了PHP的异步多线程访问的方式。

无论怎么设置防火墙和文件保护,均无法解决这个问题。

但是主动访问确可以正常运行。


最后检查发现:

Http状态码499(Client Closed Request)

本身就是:客户端主动端口请求连接时

因此判定可能是NGINX配置的原因,导致不将该异步请求代理给上游,因为异步处理,没有客户端操作,因此才记录了499的错误


那么解决这个问题,就需要调整Nginx配置。

我们在Nginx配置中添加:

fastcgi_ignore_client_abort on;

使得Nginx将 NGINX _FastCGI 忽略客户端中断


这样,无论客户端是否断开,都会将请求返回给上游,并记录相应的信息。


当然,这个方案,只是为了解决这个问题而处理的一个结果。如果涉及到其他安全运维问题,请酌情考虑并使用其他方式自行处理。

评论