以非root用户身份运行nginx


17

我遵循此过程在Ubuntu 10.04 Lucid Server http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid上安装nginx

在创建用于启动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)

我可以运行它的唯一方法是,如果我使用sudoroot,并且它以的方式运行该进程,那是我不想要的。

我已经建立chown了整个目录(chown -R nginx:nginx /opt/nginx),也已经建立chmod -R 755了目录。

user按照CS3的建议添加指令也给了我这个错误,但是还有一行。

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)

有任何想法吗?


and I've also chmod -R 755 the directory as well继续这样做,最终您将为此付出代价。目睹互联网上有多少人建议将其作为“解决”任何问题的第一电话口,实在令人震惊。如果您做一些事,Unix不会给出友好的反馈。

Answers:


11

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

sudo /etc/init.d/name

当您没有以root身份登录时(当启用登录用户sudo时)

其次,当您运行sudo /etc/init.d/nginx start ==>时,它将以您在nginx.conf用户指令(例如www-data)中指定的用户身份以root用户和worker身份触发主nginx进程。

您是否可以在发出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

我拥有的工作程序进程具有ID,而不是名称。那是nginx用户ID的机会吗?我对Ubuntu非常陌生。我不知道apt软件包是否已打开所有这些标志。你怎么发现的?
约翰

您是否检查了您在nginx.conf中指定的用户是否存在?官方仓库没有这个Nginx!请使用指定网址中的PPA
kaji 2012年

我使用的用户名长度超过8个字符的限制。这就是为什么显示用户ID的原因吧?
约翰

是的,这是一种情况
kaji 2012年

1
nginx -V是您的答案
kaji 2012年


1

我对此的5科比

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

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


以下命令显示了输出中的所有行,并突出显示了包含“路径”一词的行:nginx -V 2>&1 | sed 's/ --/\n--/g' | egrep --color '.*path.*|$'
isedwards

0

就我而言,nginx.conf中缺少文件引用:

error_log /var/log/nginx/error.log警告;

成为:error_log警告;

因此,我意外删除了/var/log/nginx/error.log参考,该参考导致了权限被拒绝的错误消息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.