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


how restart or reload nginx using php

i 用 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")我需要访问 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呢?

我需要访问 php-fpm 作为根用户

天哪,没有

PHP-FPM不会以root身份运行是有充分理由的 - 因为这是一件非常非常糟糕的事情。

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

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

大多数人会告诉你永远不要像root那样运行php,但是,如果您有多个php-fpm.sock文件,并且您有多个安全级别来确保不仅仅是您能够以root权限执行php,这是相当安全的。请记住,php 应该只以所需的最低权限执行。

我使用的是 Centos,所以我使用的一些文件名、路径和命令对你来说可能略有不同。

安全

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

使 php 以根用户身份运行

  1. usergroup更改为root(就像您已经完成的那样(。
  2. 打开php-fpm.service .我通过 ssh 控制台输入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

编辑

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