Nginx 与 php-fpm 通信问题

Nginx 与 php-fpm 通信问题

我在上游配置了 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

从评论中我想到四件事。

  1. 路由 - 网络中的两个节点,使其能够相互连接。使用 traceroute、arp、arping 等网络工具进行检查(arp 确保节点相同)。
  2. 中间是否有防火墙或安全策略来阻止所述端口。
  3. 您的服务器是否运行 RHEL/CentOS/Fedora 或任何其他启用 SELinux 的版本?如果是,您可能需要禁用它并尝试。以下命令将为您提供 SElinux 的状态并使其宽容(如果您愿意)。检查 SElinux 的状态:getenforcesestatus | grep -i mode。如果强制执行,使其宽容:setenforce 0。再次检查状态:getenforce
  4. 检查两台服务器上的 IPtables。 iptables -nL将列出 iptables 是否已启用并允许这些端口。您可以执行以下操作来保存当前规则、刷新它并暂时停止 iptables。
    /etc/init.d/iptables 保存
    iptables -F
    /etc/init.d/iptables 停止

答案3

发生这种情况时,Php-fpm 可能已经用完了子进程,请检查池日志中是否有错误。如果您在高流量环境中长时间运行 PHP 查询,通常会发生这种情况。

相关内容