web-dev-qa-db-ja.com

非rootユーザーとしてNginxを実行する

Ansibleを使用してNginxをインストールしました。 Centos7にインストールするには、yumパッケージを使用したため、デフォルトでrootユーザーとして実行されました。 Centosボックスで別のユーザー(例-nginxユーザー)として起動および実行したい。別のユーザーで実行しようとすると、次のエラーが発生します。

制御プロセスがエラーコードで終了したため、nginx.serviceのジョブが失敗しました。詳細については、「systemctl status nginx.service」および「journalctl -xe」を参照してください。

Rootで実行することはお勧めできません。どうすればこれを回避し、非rootユーザーとしてnginxを実行できますか?ありがとう

16
Sarith

/etc/nginx/nginx.confに以下を追加/変更します:

user nginx;

ユーザーを作成し、webrootディレクトリに対する権限を再帰的に付与する必要があります。

この方法では、マスタープロセスのみがrootとして実行されます。 理由: 1024未満のポートをリッスンできるのはルートプロセスのみです。通常、Webサーバーはポート80または443、あるいはその両方で実行されます。つまり、ルートとして起動する必要があります。

非rootユーザーとしてマスタープロセスを実行するには:

次の所有権を変更します。

  • エラーログ
  • access_log
  • pid
  • client_body_temp_path
  • fastcgi_temp_path
  • proxy_temp_path
  • scgi_temp_path
  • uwsgi_temp_path

Listenディレクティブを1024を超えるポートに変更し、必要なユーザーとしてログインして、nginxをnginx -c /path/to/nginx.confで実行します。

27
Farhad Farahi

それが役立つ場合に備えて、テスト/デバッグの目的で、Debian(ストレッチ)ラップトップで非特権ユーザーとしてnginxインスタンスを実行することがあります。

次のような最小限の構成ファイルを使用します。

worker_processes 1;
error_log stderr;
daemon off;
pid nginx.pid;

events {
  worker_connections  1024;
}

http {
  include             /etc/nginx/mime.types;
  default_type        application/octet-stream;

  sendfile on;

  keepalive_timeout   65;

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
  ssl_prefer_server_ciphers on;
  access_log access.log;
  server {
    listen            8080;
    server_name       localhost;

    location / {
      include /etc/nginx/uwsgi_params;
      uwsgi_pass localhost:8081;
    }
  }
}

そして私はプロセスを開始します:

/usr/sbin/nginx -c nginx.conf -p $PWD
8
David Douard