有没有一种简单的方法可以在服务器上的 502 网关超时后自动重新启动 php-fpm?

问题描述 投票:0回答:2

您是否有任何关于为使用 Wordpress 和 nginx 的大型站点安装心跳工具的有用链接、提示或脚本。如果太多人同时访问该站点,服务器就会关闭。我需要一些东西来在发生这种情况后立即自动重新启动网站。

问候

php wordpress nginx timeout restart
2个回答
5
投票

虽然 kaicurry 的答案是正确的,但您应该编辑

php.ini
文件以有望解决问题的根源;真正回答你的问题:

  1. 编辑您的

    php-fpm.service
    文件。例如,输入:

    nano /lib/systemd/system/php-fpm.service
    
  2. [Service]
    底部添加以下两行:

    Restart=on-failure
    RestartSec=5s
    
  3. 重新启动系统ctl:

    systemctl daemon-reload
    

PHP 现在将在失败时自动重新启动。您应该偶尔检查日志以确保它不会经常失败。

您可能还希望对 nginx 执行相同的操作:

/lib/systemd/system/nginx.service


4
投票

您的问题是如何在 502 上重新启动 PHP。我的第一个答案是尝试从一开始就防止 502 发生。

  1. PHP 可能消耗过多内存。我的猜测是您的 php FCGI 子项数量设置得太高。在您的初始化脚本中,您应该有一个类似 PHP_FCGI_CHILDREN=20 或类似的条目来控制将启动的 PHP 进程的数量。我会尝试减少数量。如果您可以确定每个 PHP 进程的平均内存(也许使用 top),那么您可以确定应该运行的 PHP 进程的最大数量。例如,如果您有一台 2,000MB 的服务器,并且每个 PHP 进程最多消耗 100MB,那么您需要将它们限制为 20。

  2. 您可以创建另一个位置并以@符号开始名称。 @ 符号用于“内部”位置。我喜欢使用 nginx 的 http://openresty.org 发行版。它包括 ngx_lua http://wiki.nginx.org/HttpLuaModule 模块。 Lua 是一种脚本语言,可以(除其他外)执行 shell 命令。例如:

    location / {
      error_page 502 = @php502error;
    }
    location @php502error {
      content_by_lua 'os.execute("/bin/restart-my-php-processes.sh")';
    }
    

    os.execute
    是阻塞的,所以你要记住这一点...我听说有人设置 thttpd 来运行脚本。所以你可以在 @php502error 位置使用 proxy_pass 。

© www.soinside.com 2019 - 2024. All rights reserved.