2014-09-10 10 views
65

Ich verwende die Standardkonfiguration, während ich das spezifische Verzeichnis mit nginx auf meinem ubuntu 12.04 Rechner installiere.Nginx: stat() fehlgeschlagen (13: Berechtigung verweigert)

server { 
     #listen 80; ## listen for ipv4; this line is default and implied 
     #listen [::]:80 default ipv6only=on; ## listen for ipv6 

     index index.html index.htm; 

     # Make site accessible from http://localhost/ 
     server_name localhost; 

     location/{ 
       # First attempt to serve request as file, then 
       # as directory, then fall back to index.html 
       root /username/test/static; 
       try_files $uri $uri/ /index.html; 
       # Uncomment to enable naxsi on this location 
       # include /etc/nginx/naxsi.rules 
     } 
... 

... 
} 

Ich möchte nur einen einfachen statischen Nginx-Server, um Dateien aus diesem Verzeichnis zu liefern. Allerdings überprüft die error.log I

2014/09/10 16:55:16 [crit] 10808#0: *2 stat() "/username/test/static/index.html" failed (13: Permission denied), client:, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "domain" 
2014/09/10 16:55:16 [error] 10808#0: *2 rewrite or internal redirection cycle while internally redirecting to "/index.html 

sehen habe ich bereits getan chown -R www-data:www-data auf /username/test/static, ich habe sie zu chmod 755 gesetzt. Ich weiß nicht, was ich noch einstellen muss.

+3

Überprüfen Sie, ob der 'www-data' Benutzer' cd' zum '/ username/test/static' Verzeichnis wechseln kann:' sudo -u www-data cd/username/test/static' –

+0

Ich erhalte die Berechtigung verweigert, aber wenn ich ls -l es zeigt, dass es auf www-data user – user299709

+2

Konnte es sein, dass/username ist auf encryptfs? Ich habe genau die gleichen Probleme mit dem Verzeichnis/home/username, in dem sich meine Website befindet. Wenn ich es aus dem Verschlüsselungsmodus entferne, funktioniert alles einwandfrei. Noch keine Lösung für mich ... – Georgi

Antwort

123

Nginx arbeitet innerhalb des Verzeichnisses, wenn Sie also nicht cd zu diesem Verzeichnis vom nginx-Benutzer senden können, wird es fehlschlagen (wie der stat Befehl in Ihrem Protokoll). Stellen Sie sicher, dass die www-usercd den ganzen Weg bis zur /username/test/static kann. Sie können bestätigen, dass die stat wird durch Ausführen

sudo -u www-data stat /username/test/static 

In Ihrem Fall wahrscheinlich das /username Verzeichnis ist das Problem hier scheitern oder gelingen. Normalerweise hat www-data keine Berechtigungen für cd für andere Benutzer Home-Verzeichnisse.

wäre die beste Lösung in diesem Fall sein www-data-username Gruppe hinzuzufügen:

gpasswd -a www-data username 

und stellen Sie sicher, dass username Gruppe alle Verzeichnisse auf dem Pfad eingeben:

chmod g+x /username && chmod g+x /username/test && chmod g+x /username/test/static 

Für Ihre Änderungen zu arbeiten, neu zu starten nginx

nginx -s reload 
+0

Bedeutet es für jedes neue Verzeichnis, das unter dem Stammverzeichnis hinzugefügt wurde, dass chmod zu den neuen Verzeichnissen gemacht werden muss? –

+2

@ElgsQianChen Beachten Sie, dass dies ein Betriebssystem-Berechtigungssystem ist. In POSIX-Systemen hängt es also von Ihrer [umask] (https://en.wikipedia.org/wiki/Umask) ab. Wenn Sie eine allgemeinere Lösung benötigen, die kein 'chmod' jedes neuen Verzeichnis erfordert, dann gibt es eine Lösung. Es erfordert umgekehrte Gruppenzuordnung ('Benutzername' zu' www-data' Gruppe) und die Verwendung von 'setgid'. Fühlen Sie sich frei, eine neue Frage für ausführlichere Beschreibung zu veröffentlichen, und ich werde glücklich sein, zu antworten. –

+0

Weitere Informationen zu Nginx-Dateiberechtigungen finden Sie unter http://askubuntu.com/a/9411/6418. – metakermit

3

Symptom:

Bilder konnten nicht in WordPress Media Library hochgeladen werden.

Ursache:

(CentOS) yum update

Fehler:

2014/10/22 18:08:50 [crit] 23286#0: *5332 open() "/var/lib/nginx/tmp/client_body/0000000003" failed (13: Permission denied), client: 1.2.3.4, server: _, request: "POST /wp-admin/media-new.php HTTP/1.1", host: "example.com", referrer: "http://example/wp-admin/media-new.php" 

Lösung:

chown -R www-data:www-data /var/lib/nginx

46

Ich habe gerade das gleiche Problem auf einem CentOS 7 Box.

Scheint, ich würde selinux treffen. Selinux in den permissiven Modus zu setzen (setenforce permissive) hat das Problem im Moment gelöst. Ich werde versuchen, mit einer richtigen Lösung zurück zu kommen.

+2

Dies ist das genaue "nicht dokumentierte" Verhalten, das ich für diese letzten 3 Tage zu verstehen versuchte ... – Achilles

+2

Hier ist ein Beitrag über dieses Verhalten: http://axilleas.me/en/blog/2013/selinux-policy- for-nginx-und-gitlab-unix-socket-in-fedora-19/ – Achilles

+1

So fand ich mich wieder hier ... Diesmal finde ich ich die fragliche Datei aus meinem Home-Verzeichnis in das HTML-Verzeichnis kopiert, und aktualisiert das Eigentum. Gleiches Problem wie 2015 ... Bessere Lösung: 'ls -Z myFile.js' zeigt den SELinux Kontext: ' -rw-r - r--. nginx nginx unconfined_u: objekt_r: user_home_t: s0 myFile.js' Verwenden Sie 'chcon -v --type = httpd_sys_content_t myFile', um den SELinux-Inhalt zu ändern. –

9

Sie können Security-Enhanced Linux ausführen lassen, also fügen Sie eine Regel hinzu. Ich hatte die Erlaubnis 13 Fehler, obwohl Berechtigungen festgelegt wurden und Benutzer existiert ..

chcon -Rt httpd_sys_content_t /username/test/static

1

die statischen Daten standardmäßig, wenn Sie die nginx installieren, in/var sein/www/html. So können Sie einfach kopieren Sie Ihre statischen Ordner in/var/html/und stellen Sie die

root /var/www/<your static folder> 

in ngix.conf (oder/etc/nginx/sites-available/default)

Das ist für mich gearbeitet auf Ubuntu, aber ich denke, dass es für andere Distributionen nicht viel anders sein sollte.

Ich hoffe, es hilft.

0

Ich hatte das gleiche Problem, ich benutze Plesk Onyx 17 mit Centos7. Ich konnte diesen Fehler in Proxy_error_log unter den betroffenen Domänenprotokollen sehen. Alle Verzeichnisse/Dateien in/var/www/vhosts/gehören den jeweiligen Benutzern (Domain-Eigentümern) und Sie können sehen, dass sie alle in der Gruppe psacln sind. So war Lösung nginx auch zu dieser Gruppe hinzuzufügen, er kann so sehen, was er braucht:

usermod -aG psacln nginx 

Und in der Tat neu starten nginx und lädt Seite mit Strg + F5.

6

Nginx muss + x Zugriff auf alle Verzeichnisse haben, die zum Stammverzeichnis der Site führen.

Stellen Sie sicher, dass Sie + x für alle Verzeichnisse im Pfad haben, der zum Stamm der Site führt. Zum Beispiel, wenn der Site-Stamm ist/home/username/siteRoot:

chmod +x /home/ 
chmod +x /home/username 
chmod +x /home/username/siteroot 
0

ich dieses Problem konfrontiert, löste ich es Berechtigungen zu geben, Benutzer- und Gruppen etwas nginx:

chown -R nginx:nginx /username/test/static 
0

In meinem Fall, wird der Ordner, der die Dateien bedient war eine symbolische Verbindung zu einem anderen Ordner, die mit

ln -sf /origin /var/www/destination 

Auch wenn die Berechtigungen (Benutzer- und Gruppen), wo korrekt auf dem Zielordner (den symbolischen Link), habe ich noch ha d Der Fehler, da Nginx Berechtigungen für die Hierarchie des Ursprungsordners benötigt.

Verwandte Themen