以非 root 用户身份运行 nginx

以非 root 用户身份运行 nginx

我按照此过程在我的 Ubuntu 10.04 Lucid Server 上安装 nginxhttp://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

在创建 init 脚本来启动 nginx 并调用 /etc/init.d/nginx start 之后,我迷失了方向。当我这样做时,我收到以下错误:

Starting nginx_main: Starting /opt/nginx/sbin/nginx...
nginx: [alert] could not open error log file: open() "/opt/nginx/logs/error.log" failed (13: Permission denied)
2012/03/16 18:17:27 [emerg] 859#0: open() "/opt/nginx/logs/access.log" failed (13: Permission denied)

我运行它的唯一方法是使用,sudo它以 的形式运行该过程root,但这是我所不想要的。

我已经chown拥有整个目录(chown -R nginx:nginx /opt/nginx)并且我也拥有chmod -R 755该目录。

按照 CS3 的建议添加user指令也会出现此错误,但会多出一行。

Starting nginx_main: Starting /opt/nginx/sbin/nginx...
nginx: [alert] could not open error log file: open() "/opt/nginx/logs/error.log" failed (13: Permission denied)
2012/03/16 18:48:34 [warn] 1606#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /opt/nginx/conf/nginx.conf:2
2012/03/16 18:48:34 [emerg] 1606#0: open() "/opt/nginx/logs/access.log" failed (13: Permission denied)

有任何想法吗?

答案1

首先,应该运行初始化脚本

sudo /etc/init.d/name

当您未以 root 身份登录时(当登录用户启用了 sudo 时)

其次,当您运行 sudo /etc/init.d/nginx start ==> 时,它会以 root 身份启动主 nginx 进程,并以您在 nginx.conf 用户指令中指定的用户身份启动工作进程(例如 www-data)

当发出 sudo /etc/init.d/nginx start 时,您能否确认 nginx 下的所有进程是否都由 root 运行?

ps aux | grep [n]ginx

例如。

在此处输入图片描述

建议:Ubuntu 10.04 LTS 拥有来自 nginx 团队的出色 ubuntu 软件包支持。那么,如果您不需要 nginx 中的自定义模块,为什么还要从源代码安装呢?

咨询这里

二进制包已经包含了所需的大部分模块

nginx version: nginx/1.0.12
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/buildd/nginx-1.0.12/debian/modules/nginx-echo --add-module=/build/buildd/nginx-1.0.12/debian/modules/nginx-upstream-fair

答案2

添加用户nginx.conf 中的指令

参考:http://wiki.nginx.org/CoreModule#user

答案3

我对此的 5 戈比

nginx -V 2>&1 | sed 's/ --/\n--/g' | grep path

.. 将获取所有其他路径,您应该在自定义提供的配置中或使用“-g”选项覆盖这些路径。

答案4

我在尝试构建docker文件时遇到了同样的问题

就像 @kaji 的屏幕上一样,我的主进程由 root 拥有,而子进程由 www-data 拥有

在我看来这似乎是错误的,但将根添加到 www-data 似乎已经解决了这个问题,我非常怀疑这是否是最佳做法,所以我会做更多的研究

sudo -E usermod -aG www-data root && newgrp www-data

相关内容