web-dev-qa-db-fra.com

Exécuter Nginx en tant qu'utilisateur non root

J'ai installé Nginx avec Ansible. Pour installer sur Centos7, j’utilisais le paquet yum, il était donc exécuté par défaut sous le nom root user. Je veux qu'il démarre et s’exécute en tant qu’utilisateur différent (ex - nginx user) dans la zone Centos. Lorsque j'essaie de l'exécuter avec un autre utilisateur, l'erreur suivante apparaît:

La tâche pour nginx.service a échoué car le processus de contrôle s'est terminé avec code d'erreur. Voir "systemctl status nginx.service" et "journalctl -xe" pour plus de détails.

Je sais que ce n'est pas conseillé de fonctionner en tant que root. Alors, comment puis-je contourner cela et exécuter nginx en tant qu'utilisateur non root. Merci

5
Sarith

Ajoutez/modifiez les éléments suivants dans votre /etc/nginx/nginx.conf:

user nginx;

Vous devez créer l'utilisateur et accorder des autorisations sur les répertoires webroot de manière récursive.

De cette façon, seul le processus maître s'exécute en tant que root. Parce que: Seuls les processus racine peuvent écouter les ports inférieurs à 1024. Un serveur Web s'exécute généralement sur les ports 80 et/ou 443. Cela signifie qu'il doit être démarré en tant que root.

Pour exécuter le processus maître en tant qu'utilisateur non root:

Changer la propriété des éléments suivants:

  • error_log 
  • journal_accès
  • pid
  • client_body_temp_path
  • fastcgi_temp_path
  • proxy_temp_path
  • scgi_temp_path
  • uwsgi_temp_path

Modifiez les directives d'écoute pour les ports supérieurs à 1024, connectez-vous en tant qu'utilisateur souhaité et exécutez nginx par nginx -c /path/to/nginx.conf

11
Farhad Farahi

Juste au cas où cela aiderait, à des fins de test/débogage, j’exécuterai parfois une instance nginx en tant qu’utilisateur non privilégié sur mon ordinateur portable Debian (extensible).

J'utilise un fichier de configuration minimal comme ceci:

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;
    }
  }
}

et je commence le processus avec:

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