![Nginx 与 php-fpm 通信问题](https://linux22.com/image/658681/Nginx%20%E4%B8%8E%20php-fpm%20%E9%80%9A%E4%BF%A1%E9%97%AE%E9%A2%98.png)
我在上游配置了 2 个 nginx 服务器和 4 个专用 php-fpm 服务器,用于执行 PHP,每个服务器有 2 个实例,这意味着在上游我为每个 php-fpm 服务器提供了 8 个实例,端口为 9000 和 9001。
有时,nginx 无法连接端口 9000 和 9001 上的 php-fpm,甚至当我从 nginx 执行 telnet 到端口 9000 或 9001 上的 php-fpm 服务器时,也无法连接。
应该在 nginx 和 php-fpm 上启用哪种日志来识别问题是网络连接问题还是服务器问题。
任何帮助将不胜感激。
谢谢
答案1
php-fpm 可能只监听 127.0.0.1 而不接受来自其他服务器的连接,您应该运行(以 root 身份)“netstat -tulnp”并查看 php-fpm 监听的端口/地址。
答案2
从评论中我想到四件事。
- 路由 - 网络中的两个节点,使其能够相互连接。使用 traceroute、arp、arping 等网络工具进行检查(arp 确保节点相同)。
- 中间是否有防火墙或安全策略来阻止所述端口。
- 您的服务器是否运行 RHEL/CentOS/Fedora 或任何其他启用 SELinux 的版本?如果是,您可能需要禁用它并尝试。以下命令将为您提供 SElinux 的状态并使其宽容(如果您愿意)。检查 SElinux 的状态:
getenforce
或sestatus | grep -i mode
。如果强制执行,使其宽容:setenforce 0
。再次检查状态:getenforce
。 - 检查两台服务器上的 IPtables。
iptables -nL
将列出 iptables 是否已启用并允许这些端口。您可以执行以下操作来保存当前规则、刷新它并暂时停止 iptables。/etc/init.d/iptables 保存
iptables -F
/etc/init.d/iptables 停止
答案3
发生这种情况时,Php-fpm 可能已经用完了子进程,请检查池日志中是否有错误。如果您在高流量环境中长时间运行 PHP 查询,通常会发生这种情况。