我在一台托管 Wordpress 的测试机器上安装了 nginx。我试图解决一些权限问题,但遇到了一些我无法解决的问题。
尽管我所知道的所有地方我都告诉它以用户“nginx”身份运行,但whoami
报告结果却是“apache”。
- 在 nginx.conf 文件中,我有用户 nginx 设置。
- 如果我运行
ps aux | grep [n]ginx
,主进程将以 root 身份运行,工作进程将以 nginx 身份运行。 - 我的网站配置文件中没有提到 apache
- 我有
<?php echo(exec("whoami")); ?>
一个 php 页面,它响应为“apache” - 权限与此 apache 帐户绑定。例如,如果将 public_html 文件夹设置为 nginx,则会出现权限问题,但如果设置为 apache,则一切正常。
我似乎找不到其他地方可以看到这个 Apache 帐户。我甚至想删除它,但当我尝试这样做时,userdel 说用户已登录。
答案1
在 Nginx 设置中,您可能使用 PHP-FPM 来解释 PHP 脚本。PHP-FPM 有自己的配置,用于定义池。每个池都可以作为自己的用户运行。本质上:Nginx 需要能够读取您直接从其提供的(静态)文件(并遍历(即 x)目录上的权限)PHP-FPM(相关池)需要具有对文件的读取权限,以及对文件夹(或您要修改的任何文件)的写入权限(以及遍历权限)。
PHP-FPM 配置通常位于 /etc/php-fpm.conf 和 /etc/php-fpm.d/*.conf
PHP-FPM 配置的相关部分可能如下所示:
[pool_name]
listen = 127.0.0.1:9000
user = apache
group = apache
检查 PHP-FPM 正在运行的用户:(ps -ef | grep php-fpm
如果您有多个池,则可能拥有多个 php-fpm 实例,可能有多个用户)。
(顺便说一句,如果你查看你的 Nginx 配置,你可能会找到对 FastCGI 处理程序的引用,例如:fastcgi_pass 127.0.0.1:9000;
。此处指定的地址和端口需要与你要修改的用户/组的池的地址和端口相匹配)。
此外,仅出于诊断目的,您不必查看 nginx 以哪个用户身份运行,而是可以搜索以 apache 用户身份运行的程序(即ps -ef | grep apache
)。
答案2
这取决于您的 php 脚本如何运行,它们要么在 apache 服务器上运行,然后 nginx 将 php 请求重定向到它,要么由以 apache 身份运行的 php-fpm/FastCGI 进程运行。您需要检查这一点,并让它们以 nginx 身份运行(如果需要)。
如果正在使用 php-fpm,您需要在 /etc/php-fpm.d/ 下找到相应的配置,例如 /etc/php-fpm.d/somesite.conf,并确保下一行如下所示:
user = nginx
group = nginx
然后通过以下命令重新启动 php-fpm 安装:
service php-fpm restart
或者
/etc/init.d/php-fpm restart