我有一个 PHP 脚本,用于创建目录并将图像输出到该目录。这在 Apache 下运行良好,但我们最近决定切换到 NGINX,以充分利用我们有限的 RAM。我使用 PHP mkdir() 命令创建目录:
mkdir(dirname($path['image']['server']), 0755, true);
切换到 NGINX 后,我收到以下警告:
Warning: mkdir(): Permission denied in ...
我已经检查了父目录的所有权限,因此我确定我可能需要更改 NGINX 或 PHP-FPM“用户”,但我不确定如何执行此操作(我从未指定过 APACHE 的用户权限)。我似乎找不到太多相关信息。任何帮助都非常好!
(注意:除了这个小问题之外,切换到 NGINX 的过程非常顺利;这是我第一次使用它,而且实际上只花了大约 10 分钟就启动并运行了 NGINX。现在我只是在解决一些问题。)
答案1
以 www:www 身份运行 nginx 和 php-fpm
###1. Nginx
编辑 nginx.conf 并设置用户到www www;
:
user www www;
如果主进程以 root 身份运行,则 nginx 将 setuid()/setgid() 为 USER/GROUP。如果未指定 GROUP,则 nginx 使用与 USER 相同的名称。默认情况下,它是 nobody 用户和 nobody 或 nogroup 组或 ./configure 脚本中的 --user=USER 和 --group=GROUP。
###2. PHP-FPM
编辑php-fpm.conf并将用户和组设置为www
:
[www]
user=www
group=www
用户 - 进程的 Unix 用户。默认“www-data”
group - Unix 进程组。默认为“www-data”
答案2
在Ubuntu 14.04要更改的文件用户和团体在PHP-FPM是:/etc/php5/fpm/pool.d/www.conf
。在此文件中更改以下参数:
user = www
group = www
listen.owner = www
listen.group = www
答案3
为了回答你的实际问题只需像这样更改user
行:nginx.conf
user [username];
例子:
user www-data;
Nginx 以 身份运行的首选用户实际上因操作系统而异。有时 Nginx 应该以 身份运行www-data
。其他时候它实际上应该以 身份运行nobody
。
在某些操作系统(例如 Windows)上,这甚至无关紧要,并且可以注释掉或完全排除该user
行nginx.conf
。如果您使用默认用户,也可以在 Linux 中将其排除。
答案4
以下解决方案可以帮我使用Ubuntu 18.04 LTS
、nginx 1.14
和更改 Web 用户php7.2-fpm
。
1. Nginx
编辑/etc/nginx/nginx.conf
并将用户设置为webuser;
user webuser;
2. PHP-FPM
编辑/etc/php/7.2/fpm/pool.d/www.conf
。
user = webuser
group = webuser
...
listen.owner = webuser
listen.group = webuser