it-swarm.com.de

Führen Sie nginx als Nicht-Root-Benutzer aus

Ich habe diesen Prozess befolgt, um nginx auf meinem Ubuntu 10.04 Lucid Server zu installieren http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

Ich habe mich verlaufen, nachdem ich ein Init-Skript zum Starten von nginx erstellt und dann /etc/init.d/nginx start aufgerufen hatte. Als ich das tat, bekam ich den folgenden Fehler:

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)

Ich kann es nur ausführen, wenn ich Sudo verwende und der Prozess als root ausgeführt wird, was ich nicht möchte.

Ich habe chown das gesamte Verzeichnis (chown -R nginx:nginx /opt/nginx) und ich habe auch chmod -R 755 auch das Verzeichnis.

Das Hinzufügen der Direktive user, wie von CS3 vorgeschlagen, gibt mir ebenfalls diesen Fehler, jedoch mit einer zusätzlichen Zeile.

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)

Irgendwelche Ideen?

17
John

Zunächst sollen Init-Skripte ausgeführt werden

Sudo /etc/init.d/name

wenn Sie nicht als root angemeldet sind (wenn der angemeldete Benutzer Sudo aktiviert ist)

Zweitens wird beim Ausführen von Sudo /etc/init.d/nginx start ==> der Master-Nginx-Prozess als Root- und Worker-Prozess als der Benutzer ausgelöst, den Sie in Ihrer Benutzeranweisung nginx.conf angegeben haben (z. B. www-data).

Können Sie bestätigen, ob Ihr gesamter Prozess unter nginx von root ausgeführt wird, wenn Sie Sudo /etc/init.d/nginx starten?

mit

ps aux | grep [n]ginx

z.B.

enter image description here

Vorschlag: Ubuntu 10.04 LTS bietet eine hervorragende Unterstützung für Ubuntu-Pakete durch das Nginx-Team. Warum sollten Sie sich also die Mühe machen, von der Quelle aus zu installieren, wenn Sie kein benutzerdefiniertes Modul in nginx benötigen?

Konsultieren Sie hier

Das Binärpaket enthält bereits dringend benötigte Module

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

Fügen Sie die Anweisung user in nginx.conf hinzu

Referenz: http://wiki.nginx.org/CoreModule#user

2

Meine 5 Kopek dazu

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

.. erhalten Sie alle anderen Pfade, die Sie in der benutzerdefinierten Konfiguration oder mit der Option "-g" überschreiben sollten.

1
gaRex

In meinem Fall fehlte in meiner nginx.conf ein Dateiverweis:

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

Wurde: error_log warn;

Daher habe ich versehentlich die Referenz /var/log/nginx/error.log gelöscht, was zu einer Fehlermeldung führte, dass die Berechtigung verweigert wurde.

0
ilker