如何重启或重新加载nginx使用PHP

时间:2016-02-11 12:20:49

标签: php nginx centos

我用php更改nginx conf文件 接下来我要重启nginx。 但无法重启nginx

<?php
    if(exec("service nginx restart")) {
        echo "ok shd";
    } else {
        echo "error";
    }
?>
<hr>
<?php
    if(exec("/etc/init.d/nginx reload")) {
        echo "ok shd";
    } else {
        echo "error";
    }
?>
<hr>
<?php
    if(exec("/usr/sbin/nginx -s reload")) {
        echo "ok shd";
    } else {
        echo "error";
    }
?>

输出是:

error<hr>
error<hr>
error

要做exec("service nginx restart")我需要以root身份访问php-fpm,所以我转到/usr/local/etc/php-fpm.conf

user = nobody
group = nobody

并将其更改为:

user = root
group = root

然后输入service php-fpm restart

输出:

Starting php-fpm [11-Feb-2016 05:14:33] ERROR: [pool www] please specify user and group other than root
[11-Feb-2016 05:14:33] ERROR: FPM initialization failed
 failed

这意味着它无法以root身份运行。

那么如何使用php重新启动或重新加载nginx?

2 个答案:

答案 0 :(得分:2)

  

我需要以root身份访问php-fpm

OMG NO

Theres是PHP-FPM以root身份运行的一个很好的理由 - 因为它真的,真的不好做。

如果您确实必须通过网络服务器公开此功能,请通过sudo进行操作。同样,对系统配置的任何更改都应该通过sudo。

顺便说一句:你的脚本中缺少一个至关重要的东西是ignore_user_abort()。当PHP重新启动(if)nginx时,与浏览器的连接将丢失。默认情况下,PHP将在此时终止。

答案 1 :(得分:0)

大多数人会告诉您永远不要将php作为root运行,但是,如果您有多个php-fpm.sock文件,并且您有多个级别的安全性可以确保安全只有您能够以php权限执行root。请记住,php应该只使用所需的最低权限执行。

<强> NB

我正在使用Centos,因此我使用的一些文件名,路径和命令可能与您略有不同。

安全

  1. 创建一个只有您有权访问的单独login portal。您可以通过打开端口并使用防火墙和/或nginx规则来仅允许您的IP地址(理想情况下是您可以VPN的专用IP地址)来实现此目的。我还建议为您的安全门户设置Google身份验证器。
  2. nginx配置中,您现在可以在不同的服务器配置下定义2个不同的sock文件。
  3. 创建php-fpm.conf的副本。该文件应包含在/etc/php-fpm.conf
  4. 重新启动php-fpm,然后查看其状态以确保其正常运行。如果您使用/var/run/php-fpm/获得权限错误,则可能需要手动更改nginx及其内容的权限和组。
  5. 让php以root身份运行

    1. usergroup更改为root(就像您已经完成的那样)。
    2. 打开php-fpm.service。我通过ssh console键入nano /lib/systemd/system/php-fpm.service
    3. ExecStart=/usr/sbin/php-fpm --nodaemonize更改为ExecStart=/usr/sbin/php-fpm --nodaemonize -R-R允许php-fpm以root身份运行。
    4. 重新启动daemon。如果您使用的是centos,请输入systemctl daemon-reload
    5. 修改

      如果你想让php作为root执行的唯一原因是重启nginx,那么你最好通过设置一个cron作业来做到这一点。请参阅:this question或通过ssh手动。