Nginx: Ubuntu 上的 Nginx 请求被拒绝

我是系统管理的新手,在 Ubuntu 上安装了 nginx 通过木偶之后,我得到了以下输出:

[alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)


[warn] 1898#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1


[emerg] 1898#0: open() "/var/log/nginx/access.log" failed (13: Permission denied)

我怎样才能删除所有这些信息?

我不想直接使用命令行(chown/chmod)并在每次创建新服务器时重复它。因此,我正在考虑必须在木偶清单中加入什么内容。

在这种情况下,最佳的系统管理实践是什么: 更改/var/log/nginx 的所有者/权限,还是将日志存储在不同的位置?如果 chown/chmod 是可行的方法,那么哪些特定权限将确保最高级别的安全性?

我试过了,但没用:

  file { '/var/log/nginx':
ensure  => directory,
mode    => '0755',
owner   => 'www-data',
group   => 'www-data',
recurse => true
}

编辑:

vagrant@precise64:~$ ps aux | grep [n]ginx
root      1001  0.0  0.1  62908  1388 ?        Ss   08:47   0:00 nginx: master process /usr/sbin/nginx
www-data  1002  0.0  0.1  63260  1696 ?        S    08:47   0:00 nginx: worker process
www-data  1003  0.0  0.1  63260  1696 ?        S    08:47   0:00 nginx: worker process
www-data  1004  0.0  0.1  63260  1696 ?        S    08:47   0:00 nginx: worker process
www-data  1005  0.0  0.1  63260  1696 ?        S    08:47   0:00 nginx: worker process
173589 次浏览

如果我假设你的第二个代码是木偶配置,那么我有一个逻辑解释,如果错误和日志文件创建之前,你可以尝试这一点

sudo chown -R www-data:www-data /var/log/nginx;
sudo chmod -R 755 /var/log/nginx;

Nginx 需要通过命令 'sudo /etc/init.d/nginx start'运行

确保您以超级用户的身份运行测试。

sudo nginx -t

或者测试不具备正确完成测试所需的所有权限。

对于我来说,我只是将 selinux 从强制改为允许,然后就可以在没有任何错误的情况下启动 nginx。

只是因为你没有权利访问文件,使用

chmod -R 755 /var/log/nginx;

或者你可以改成 sudo

查看日志文件的权限授予属于组 adm 的用户。

在命令行问题上向此组添加用户:

sudo usermod -aG adm <USER>

我只是修补 nginx 二进制代替路径 /var/log/nginx/error.log和其他与本地路径。

$ perl -pi \
-e 's@/var/log/nginx/@_var_log_nginx/@g;' \
-e 's@/var/lib/nginx/@_var_lib_nginx/@g;' \
-e 's@/var/run/nginx.pid@_var_run/nginx.pid@g;' \
-e 's@/run/nginx.pid@_run/nginx.pid@g;' \
< /usr/sbin/nginx > nginx
$ chmod +x nginx
$ mkdir _var_log_nginx _var_lib_nginx _var_run _run
$ ./nginx -p . -c nginx.conf

可以用来测试。

我面临着类似的问题,而重新启动 Nginx和发现它是一个原因的 SeLinux。请确保在禁用 SeLinux 或临时将其设置为 放任自流模式后尝试使用以下命令:

setenforce 0

我希望这能有所帮助:)

如果不想以 root 用户身份启动 nginx。

第一个创建日志文件:

sudo touch /var/log/nginx/error.log

然后修复权限:

sudo chown -R www-data:www-data /var/log/nginx

sudo find /var/log/nginx -type f -exec chmod 666 {} \;

sudo find /var/log/nginx -type d -exec chmod 755 {} \;

在 Debian WSL (用于 Linux 的 Windows 子系统)上,我必须使用:

sudo chmod -R 775 /var/log/nginx

这对我有用,

sudo chmod -R 777 /var/log/nginx

找到一个 描述得不错怎么办。



# support running as arbitrary user which belogs to the root group
RUN chmod g+rwx /var/cache/nginx /var/run /var/log/nginx
# users are not allowed to listen on priviliged ports
RUN sed -i.bak 's/listen\(.*\)80;/listen 8081;/' /etc/nginx/conf.d/default.conf
EXPOSE 8081
# comment user directive as master process is run as user in OpenShift anyhow
RUN sed -i.bak 's/^user/#user/' /etc/nginx/nginx.conf


修复了在没有 root 用户的情况下运行 NGNIX 的所有问题。