如何关闭 nginx 警告信息 nginx:[警报] 无法打开错误日志文件:open()“/var/log/nginx/error.log”失败(13:权限被拒绝)

如何关闭 nginx 警告信息 nginx:[警报] 无法打开错误日志文件:open()“/var/log/nginx/error.log”失败(13:权限被拒绝)

我使用普通用户而非 root 用户运行 nginx。我在系统范围内安装了 nginx,但 HOME 中有 nginx.conf。

$HOME/nginx/nginx.conf

worker_processes  1;
error_log  /home/worker/nginx/log/nginx/error.log warn;
pid        /home/worker/nginx/run/nginx.pid;
events {
  worker_connections  1024;
}
http {
  include      /etc/nginx/mime.types;
  default_type application/octet-stream;
  access_log   /home/worker/nginx/log/nginx/access.log;
  server {
    listen 8080;
    root /home/worker/nginx/data;
  }
}

启动 nginx

$ nginx -c /home/worker/nginx/nginx.conf
nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)

正如你在 nginx.conf 中看到的,我已经定义了error_log,但仍然收到警告信息:

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

nginx 本身可以工作,只是想删除这个警告信息,我该怎么做?

答案1

最近(2020-11-19),-enginx 添加了一个新的选项,允许您覆盖已编译的错误日志路径。您可以使用该选项将 nginx 指向一个用户可写文件(或者可能是stderr)。

https://trac.nginx.org/nginx/changeset/f18db38a9826a9239feea43c95515bac4e343c59/nginx

答案2

我迟到了,但我因为其他原因遇到了这个问题。我只是为 nginx (www-data在我的情况下是用户) 添加了对文件夹和文件的访问权限:

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

我实际上删除了整个文件夹和日志文件并重新创建了它们:

sudo rm -rf /var/log/nginx
sudo mkdir /var/log/nginx
sudo touch /var/log/nginx/error.log
sudo chown -R www-data:www-data /var/log/nginx

也许有一个更优雅的解决方案。

答案3

显示此错误的原因是执行的用户nginx无权查看 ngnix 进程创建的日志文件,该文件很可能归用户所有,www-data而不是用户所有。如果可能,使用 sudo 运行该命令或授予用户查看错误日志的权限将消除显示的错误消息。

答案4

可以和 结合RUN ln -sf /dev/stdout/tmp/access.log \ &&ln -sf /dev/stderr/tmp/error.log使用,打印出日志,另外由于自定义nginx是编译的,非root使用后会报日志无权查看,所以使用nginx -e指定非root用户的nginx日志路径,注意nginx.conf需要你指定日志路径

FROM sec_demo:latest

ARG UID=101
ARG GID=101

RUN curl -k -O xxx/nginx-1.25.3.tar.gz && \
    tar xf nginx-1.25.3.tar.gz

RUN groupadd --system --gid $GID nginx || true \
    && useradd --system --gid nginx --no-create-home --home /nonexistent --comment "nginx user" --shell /bin/false --uid $UID nginx || true

RUN mkdir -p /usr/local/nginx/conf \
    && cp -r nginx/conf /usr/local/nginx \
    && cp nginx/sbin/nginx /usr/bin \
    && cp -r nginx/html /usr/local/nginx \
    && mkdir -p /usr/local/nginx/conf.d \
    && mkdir -p /usr/local/nginx/ssl \
    && mkdir -p /usr/local/nginx/logs

RUN chown -R $UID:0 /usr/local/nginx \
    && chmod -R g+w /usr/local/nginx

RUN ln -sf /dev/stdout /usr/local/nginx/logs/access.log \
    && ln -sf /dev/stderr /usr/local/nginx/logs/error.log

STOPSIGNAL SIGQUIT

USER $UID

CMD ["nginx", "-c", "/usr/local/nginx/conf/nginx.conf","-e","/usr/local/nginx/logs/access.log","-g","daemon off;"]

相关内容