即使用户有写入组访问权限,Nginx也无法写入日志文件。 这里有一些细节:
www-data用户在ubuntu组中:
$ id www-data uid=33(www-data) gid=33(www-data) groups=33(www-data),1000(ubuntu)
/ opt / logs /是组可写的:
$ ls -ld /opt/logs/ drwxrwxr-x 2 ubuntu ubuntu 4096 2012-07-27 02:47 /opt/logs/
www-data用户可以按照预期创build/ opt / logs / 1:
$ su www-data $ touch /opt/logs/1 $ ls -l /opt/logs/1 -rw-rw-r-- 1 www-data www-data 0 2012-07-27 02:47 /opt/logs/1
Nginx的用户:groups:
var_dump(system('whoami'), system('groups')); // string 'www-data' (length=8) // string 'www-data ubuntu' (length=15)
但是Nginx不能写:
Warning: file_put_contents(/opt/logs/Error.log) function.file-put-contents failed to open stream: Permission denied
/opt/logs/Error.log不存在
那么为什么coudn't它写入文件?
一个可能的原因:当您将www-data用户添加到ubuntu组时,它只会影响稍后启动的会话。
su - www-data -s /bin/bash创build一个新的会话,所以它工作正常。 但是Nginx仍然以www-data用户的身份运行,所以我怀疑这是上述错误的原因。
(如果你切换到www-data用户之前做一个usermod -a -G ubuntu www-data ,我敢肯定,你只会看到uid=33(www-data) gid=33(www-data) groups=33(www-data)键入id )
无论是重新启动Nginx或切换到www-data用户使其立即生效后做一个新的newgrp ubuntu 。