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,所以我使用的一些文件名、路径和命令对你来说可能略有不同。
安全
- 创建只有您有权访问的单独
login portal
。您可以通过打开端口并使用防火墙和/或nginx规则仅允许IP地址(理想情况下是可以VPN进入的专用IP地址(来执行此操作。我还建议您为您的安全门户设置谷歌身份验证器。 - 在
nginx
配置中,您现在可以在单独的服务器配置下定义 2 个不同的 sock 文件。 - 创建
php-fpm.conf
的副本。该文件应包含在/etc/php-fpm.conf
中。 - 重新启动
php-fpm
,然后查看其状态以确保其正常工作。如果您收到nginx
的权限错误,您可能需要手动更改/var/run/php-fpm/
的权限和组及其内容。
使 php 以根用户身份运行
- 将
user
和group
更改为root
(就像您已经完成的那样(。 - 打开
php-fpm.service
.我通过 ssh 控制台输入nano /lib/systemd/system/php-fpm.service
。 - 将
ExecStart=/usr/sbin/php-fpm --nodaemonize
更改为ExecStart=/usr/sbin/php-fpm --nodaemonize -R
。该-R
允许 php-fpm 以 root 身份运行。 - 重新启动
daemon
。如果使用centos
,请键入systemctl daemon-reload
。
编辑
如果你想让php
root
执行的唯一原因是重新启动nginx,那么你最好通过设置一个cron作业来做到这一点。请参阅:此问题或通过ssh
手动。