web-dev-qa-db-fra.com

Exécutez nginx en tant qu'utilisateur non root

J'ai suivi ce processus pour installer nginx sur mon serveur Lucid Ubuntu 10.04 http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

Je me suis perdu après avoir créé un script init pour démarrer nginx, puis appelé /etc/init.d/nginx start. Quand j'ai fait ça, j'ai eu l'erreur suivante:

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)

La seule façon de l'exécuter est d'utiliser Sudo et d'exécuter le processus sous la forme root, ce que je ne veux pas.

J'ai chown 'd tout le répertoire (chown -R nginx:nginx /opt/nginx) et j'ai aussi chmod -R 755 le répertoire également.

L'ajout de la directive user comme suggéré par CS3 me donne également cette erreur, mais avec une ligne supplémentaire.

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)

Des idées?

17
John

Tout d'abord, les scripts d'initialisation sont censés être exécutés

Sudo /etc/init.d/name

lorsque vous n'êtes pas connecté en tant que root (lorsque l'utilisateur connecté est activé Sudo)

Deuxièmement, lorsque vous exécutez Sudo /etc/init.d/nginx start ==> il déclenche le processus maître nginx en tant que processus racine et travailleur en tant qu'utilisateur que vous avez spécifié dans votre directive utilisateur nginx.conf (par exemple www-data)

Pouvez-vous confirmer si tout votre processus sous nginx est exécuté par root lors de l'émission de Sudo /etc/init.d/nginx?

avec

ps aux | grep [n]ginx

par exemple.

enter image description here

Suggestion: Ubuntu 10.04 LTS a un excellent support de paquet ubuntu de l'équipe nginx. Alors, pourquoi s'embêter à installer depuis la source si vous n'avez pas besoin d'un module personnalisé dans nginx?

Consulter ici

Le paquet binaire est déjà livré avec des modules indispensables

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

Ajoutez la directive utilisateur dans nginx.conf

Référence: http://wiki.nginx.org/CoreModule#user

2
Shyam Sundar C S

Mes 5 kopek à ce sujet

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

.. vous obtiendrez tous les autres chemins, que vous devriez remplacer dans la configuration fournie personnalisée ou avec l'option "-g".

1
gaRex

Dans mon cas, il manquait une référence de fichier dans mon nginx.conf:

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

Est devenu: error_log warn;

J'ai donc accidentellement supprimé la référence /var/log/nginx/error.log, ce qui a provoqué un message d'erreur d'autorisation refusée.

0
ilker