PHP WebSocket 服务器和 NGINX 反向代理的文件限制

File limits with PHP WebSocket Server and NGINX reverse proxy

我已经设置了一个 PHP websocket 服务器 (Ratchet) 并使用 NGINX 作为反向代理以避免让用户连接到不同的端口。一切都很顺利,直到我的连接数少于 1024(准确地说是 1020)。然后所有其他连接都被拒绝(超时)。看起来有些东西的上限为 1024 个文件描述符,但我不知道是什么。

NGINX 的 proxy_error_log 说 "upstream timed out (110: Connection timed out) while reading response header from upstream, client: my_ip, server: "domain_name", 请求:"GET /socket_server_path/ HTTP/1.1",上游:“http://127.0.0.1:8080/socket_server_path/”,主机:"domain_name_again"

NGINX 用户和用户 运行 服务器都在 /etc/security/limits.conf 中设置了良好的文件限制(高于 1024)。据我所知,进程在 /proc/PID#/limit.

中设置了上限

https://github.com/ratchetphp/Ratchet/issues/300 描述了我想象中正在发生的事情,但我没有在我的应用程序中看到错误打印。无论如何,我继续使用 --enable-fd-setsize=10000 编译 PHP,但这仍然不会让更多连接发生。

我如何才能获得有关此问题的更多详细信息并了解到底发生了什么?我现在要做的就是 NGINX 超时。但我不知道 PHP 是否无法打开更多套接字,或者它是否是 NGINX,或者完全不同的东西。

原来我只是个假人。根据 https://bugs.php.net/bug.php?id=69637 --enable-fd-setsize 不能正常工作。

即使我更改了系统头文件常量(在我原来的问题中链接的 Ratchet 问题中提到),我还是在没有 运行 'make clean' 的情况下重新编译,所以我想我是仍在使用旧的(下限)值进行编译。

我在 php 配置中找不到与此相关的任何内容。但是在更改头文件中的常量并再次编译后,我能够超过 1024 个最大值。