web-dev-qa-db-ja.com

非rootユーザーとしてnginxを実行します

私はこのプロセスに従って、私のUbuntu 10.04 Lucidサーバーにnginxをインストールしました http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

Nginxを開始するためのinitスクリプトを作成し、/ 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 'dしました(chown -R nginx:nginx /opt/nginx)と私もchmod -R 755ディレクトリも同様です。

CS3で提案されているようにuserディレクティブを追加すると、このエラーが発生しますが、行が1つ追加されます。

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)

何か案は?

17
John

まず、initスクリプトは実行されることになっています

Sudo /etc/init.d/name

rootとしてログインしていない場合(ログインしているユーザーがSudoを有効にしている場合)

次に、Sudo /etc/init.d/nginx start ==>を実行すると、マスターnginxプロセスがrootおよびワーカープロセスとしてnginx.confユーザーディレクティブで指定したユーザーとして起動されます(例:www-data)。

Sudo /etc/init.d/nginx startを発行するときに、nginxの下のすべてのプロセスがrootによって実行されているかどうかを確認できますか?

ps aux | grep [n]ginx

例えば。

enter image description here

提案: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
11
kaji

Nginx.conf内にuserディレクティブを追加します

リファレンス: http://wiki.nginx.org/CoreModule#user

2

これに関する私の5 kopek

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

..他のすべてのパスを取得します。カスタム提供の構成または「-g」オプションでオーバーライドする必要があります。

1
gaRex

私の場合、nginx.confにファイル参照がありませんでした:

error_log /var/log/nginx/error.log warn;

となった:error_log warn;

そのため、/ var/log/nginx/error.log参照を誤って削除してしまい、権限が拒否されたというエラーメッセージが表示されました。

0
ilker