我用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?
答案 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,因此我使用的一些文件名,路径和命令可能与您略有不同。
安全强>
login portal
。您可以通过打开端口并使用防火墙和/或nginx规则来仅允许您的IP地址(理想情况下是您可以VPN的专用IP地址)来实现此目的。我还建议为您的安全门户设置Google身份验证器。nginx
配置中,您现在可以在不同的服务器配置下定义2个不同的sock文件。php-fpm.conf
的副本。该文件应包含在/etc/php-fpm.conf
。php-fpm
,然后查看其状态以确保其正常运行。如果您使用/var/run/php-fpm/
获得权限错误,则可能需要手动更改nginx
及其内容的权限和组。让php以root身份运行
user
和group
更改为root
(就像您已经完成的那样)。php-fpm.service
。我通过ssh console键入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作业来做到这一点。请参阅:this question或通过ssh
手动。