Ich verwende die Standardkonfiguration, während ich das spezifische Verzeichnis hinzufüge, in dem nginx auf meinem Ubuntu 12.04-Computer installiert ist.
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, dass ein einfacher statischer Nginx-Server Dateien aus diesem Verzeichnis bereitstellt. Allerdings überprüfe error.log
ich das
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
Ich habe bereits getan chown -R www-data:www-data
auf /username/test/static
, ich habe festgelegt , sie zu chmod 755
. Ich weiß nicht, was noch eingestellt werden muss.
www-data
Benutzercd
in das/username/test/static
Verzeichnis kann:sudo -u www-data cd /username/test/static
Antworten:
Nginx arbeitet innerhalb des Verzeichnisses. Wenn Sie
cd
also vom Nginx- Benutzer nicht in dieses Verzeichnis gelangen können , schlägt dies fehl (ebenso wie derstat
Befehl in Ihrem Protokoll). Stellen Sie sicher, dass diewww-user
Dosecd
bis zum/username/test/static
. Sie könnenstat
durch Ausführen bestätigen, dass der Vorgang fehlschlägt oder erfolgreich istIn Ihrem Fall ist hier wahrscheinlich das
/username
Verzeichnis das Problem. Hatwww-data
normalerweise keine Berechtigungen fürcd
Home-Verzeichnisse anderer Benutzer.Die beste Lösung in diesem Fall wäre,
www-data
derusername
Gruppe Folgendes hinzuzufügen :und stellen Sie sicher, dass die
username
Gruppe alle Verzeichnisse entlang des Pfads eingeben kann:Starten Sie nginx neu, damit Ihre Änderungen funktionieren
quelle
umask
. Wenn Sie eine allgemeinere Lösung benötigen, für die nichtchmod
jedes neue Verzeichnis erforderlich ist , gibt es eine Lösung. Es erfordert eine umgekehrte Gruppenzuordnung (username
zurwww-data
Gruppe) und die Verwendung vonsetgid
. Fühlen Sie sich frei, eine neue Frage für eine ausführlichere Beschreibung zu posten, und ich werde gerne antworten.nginx
Benutzer kann auf mein Website-Verzeichnis zugreifen, aber es heißt immer noch, dass die Berechtigung für die Fehlerprotokolle verweigert wurde.Ich hatte gerade das gleiche Problem mit einer CentOS 7-Box.
Scheint, als würde ich Selinux treffen. Das Versetzen von Selinux in den zulässigen Modus (
setenforce permissive
) hat das Problem vorerst umgangen . Ich werde versuchen, mit einer richtigen Lösung zurück zu kommen.quelle
ls -Z myFile.js
Zeigt den SELinux-Kontext an:-rw-r--r--. nginx nginx unconfined_u:object_r:user_home_t:s0 myFile.js
Verwenden Siechcon -v --type=httpd_sys_content_t myFile
diese Option, um den SELinux-Inhalt zu ändern.sudo setenforce 0
habe es für mich behoben.SELINUX
Wert indisabled
in ändern/etc/selinux/config
, gefolgt von einem Neustart. Wenn es eingestellt istpermissive
, kann es weiterhin Überprüfungen hinter den Kulissen durchführen (mit wertvoller CPU), aber keine Maßnahmen ergreifen.Nginx muss + x Zugriff auf alle Verzeichnisse haben, die zum Stammverzeichnis der Site führen.
Stellen Sie sicher, dass Sie + x in allen Verzeichnissen im Pfad haben, der zum Stammverzeichnis der Site führt. Wenn das Site-Stammverzeichnis beispielsweise / home / username / siteroot lautet:
quelle
Unter CentOS 7.0 hatte ich dieses
Access Deined
Problem durch SELinux verursacht und diese Schritte haben das Problem behoben:Update: Nur eine Randnotiz von dem, was ich bei der Verwendung der virtuellen Linux-Server von digitalocean oder wie sie Droplets nennen, gelernt habe . Die Verwendung von SELinux erfordert eine angemessene Menge an RAM. Es ist sehr wahrscheinlich, dass Sie SELinux nicht auf einem Droplet mit weniger als 2 GB RAM ausführen und verwalten können .
quelle
setenforce 0
. Als ich jedoch zurückblickte, was diese Lösung tatsächlich tut, wurde mir klar, dass ich die Befehle erneut ausführen musste, um die Berechtigungen für den Nginx-Benutzer zu aktualisieren. Das schien zu funktionieren und ich konnte SELinux wieder durchsetzen.Möglicherweise wird Security-Enhanced Linux ausgeführt. Fügen Sie daher eine Regel hinzu. Ich hatte Berechtigungsfehler 13, obwohl Berechtigungen festgelegt wurden und der Benutzer vorhanden war.
chcon -Rt httpd_sys_content_t /username/test/static
quelle
Symptom:
Bilder konnten nicht in die WordPress Media Library hochgeladen werden.
Ursache:
(CentOS)
yum update
Error:
Lösung:
chown -R www-data:www-data /var/lib/nginx
quelle
Standardmäßig befinden sich die statischen Daten bei der Installation von nginx in / var / www / html. Sie können also einfach Ihren statischen Ordner in / var / html / kopieren und die festlegen
in ngix.conf (oder / etc / nginx / sites-available / default)
Dies funktionierte für mich auf Ubuntu, aber ich denke, es sollte für andere Distributionen nicht viel anders sein.
Ich hoffe es hilft.
quelle
Ändern Sie Ihre
nginx.conf
user
Eigenschaft inwww-static
Dateibesitzer.quelle
In meinem Fall war der Ordner, in dem die Dateien bereitgestellt wurden, ein symbolischer Link zu einem anderen Ordner, der mit erstellt wurde
Obwohl die Berechtigungen (Benutzer und Gruppe) für den Zielordner (den symbolischen Link) korrekt waren, hatte ich dennoch den Fehler, da Nginx auch Berechtigungen für die gesamte Hierarchie des Ursprungsordners haben musste.
quelle
Ich fand endlich meinen Weg durch. Kurz gesagt, nehmen wir an, Ihr Benutzername lautet
joe
und Sie halten eine Website unter Ihrem persönlichen Dateisystem/home/joe/path/to/website
.Sie müssen dem System buchstäblich sagen, dass
nginx
es Ihr Kumpel ist.Legen Sie
nginx
injoe
Gruppe:Wenn es danach immer noch nicht funktioniert, überprüfen Sie den richtigen Zugriff auf das
/home/joe
Verzeichnis. Das ist wahrscheinlich der Grund, warum Nginx die Datei nicht erreichen kann, denn selbst wenn er jetzt dein Freund ist, musst du ihm die Tür zu deinem Haus öffnen:Das ist es. Das ist buchstäblich alles, was Sie tun müssen, um Nginx Zugriff auf Ihre lokalen Dateien zu gewähren :)
Ich glaube nicht, dass es Sicherheitsbedenken bei dieser Methode gibt, da dies
nginx
die hohe Autorität ist und nur ein Administrator die Gruppe ändern kann.nginx
kann jetzt lesen, was injoe
Verzeichnissen ist. Es ist nur dann eine Sicherheitsverletzung, wenn sich der Inhaber desnginx
Kontos von dem Benutzer unterscheidet, von dem aus Sie den Verzeichniszugriff öffnen. In meinem Fall bin ich jedoch Inhaber beider Parteien, dh in einem lokalen Kontext.quelle
Ich hatte das gleiche Problem, ich verwende Plesk Onyx 17 mit Centos7. Ich konnte diesen Fehler in proxy_error_log unter den Protokollen der betroffenen Domäne sehen. Alle Verzeichnisse / Dateien in / var / www / vhosts / gehören den jeweiligen Benutzern (Domänenbesitzern), und Sie können sehen, dass sich alle in der psacln-Gruppe befinden. Die Lösung bestand also darin, Nginx auch zu dieser Gruppe hinzuzufügen, damit er sehen kann, was er braucht:
Starten Sie nginx neu und laden Sie die Seite mit Strg + F5 neu.
quelle
Ich war mit diesem Problem konfrontiert und habe es gelöst, um dem Nginx-Benutzer Berechtigungen zu erteilen und so etwas zu gruppieren:
quelle
Ich habe eine Lösung gefunden: Der Ordner wurde in den Nginx-Konfigurationsordner verschoben, in meinem Fall "/ etc / nginx / my-web-app". Und dann wurden die Berechtigungen auf Root-Benutzer "sudo chown -R root: root" my-web-app "geändert.
quelle
Sie können auch hinzufügen, welcher Benutzer den Nginx ausführen soll. Nehmen Sie in der Datei nginx.conf die folgenden Änderungen vor:
Sie können die obige Zeile als erste Zeile in Ihre nginx conf einfügen. Sie können den Namen jedes Benutzers schreiben, der die Berechtigung zum Schreiben in dieses Verzeichnis hat.
quelle
Dies ist normalerweise das Problem mit den Berechtigungen ... Für mich ist es, weil ich / root / ** als Nginx-Root verwende, höhere Berechtigungen erforderlich. Eine einfache Möglichkeit besteht darin, das Projekt in ein von Ihnen erstelltes Verzeichnis zu verschieben.
quelle