Ich möchte nur jemandem helfen. Ja, Sie möchten nur statische Dateien mit Nginx bereitstellen und haben in nginx.conf alles richtig gemacht:
location /static {
autoindex on;
#root /root/downloads/boxes/;
alias /root/downloads/boxes/;
}
Aber am Ende hast du versagt. Sie haben "403 verboten" vom Browser ...
---------------------------------------- Die Antwort unten: -------------------------------------- -
Die Lösung ist sehr einfach:
Methode 1: Führen Sie nginx als Benutzer als Eigentümer von '/ root/downloads/boxes /' aus
In nginx.conf :
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
JA, in der ersten Zeile " # Benutzer noboy; " löschen Sie einfach " # "und ändern Sie" nobody "in Ihren eigenen Benutzernamen unter Linux/OS X, dh ändern Sie ihn in" root "für den Test. Der Neustart nginx.
Achtung , Sie sollten lieber nicht nginx als root ! Hier ist es nur zum Testen gefährlich für den Hacker.
Weitere Informationen finden Sie unter Nginx (Motor X) - Was für ein Schmerz in der BUM! [13: Genehmigung verweigert]
Möglichkeit 2: Ändere '/ root/downloads/boxes /' in 'www-data' oder 'nobody'
Im Terminal :
ps aux | grep nginx
Holen Sie sich den Benutzernamen von Nginx. Es sollte 'www-data' oder 'nobody' sein die version von nginx. Dann drücke im Terminal (benutze 'www-data' zum Beispiel):
chown -R www-data:www-data /root/downloads/boxes/
------------------------------ Eine weitere wichtige Sache ist: ------------------------------
Diese übergeordneten Verzeichnisse "/" , "/ root" , "/ root/downloads" sollte die Berechtigung execute (x) für 'www-data' oder 'nobody' . d.h.
ls -al /root
chmod o+x /root
chmod o+x /root/downloads
Weitere Informationen finden Sie unter Beheben des Fehlers "403 Forbidden" und Nginx 403 für alle Dateien verboten
Sie sollten Nginx-Berechtigungen zum Lesen der Datei erteilen. Das bedeutet, dass Sie dem Benutzer, der den Nginx-Prozess ausführt, Berechtigungen zum Lesen der Datei erteilen sollten.
Dieser Benutzer, der den Nginx-Prozess ausführt, kann mit der Anweisung user
in der Nginx-Konfiguration konfiguriert werden. Diese befindet sich normalerweise oben auf nginx.conf
:
user www-data
http://wiki.nginx.org/CoreModule#user
Das zweite Argument, das Sie user
geben, ist die Gruppe. Wenn Sie es jedoch nicht angeben, wird das gleiche Argument wie beim Benutzer verwendet. In meinem Beispiel sind also sowohl der Benutzer als auch die Gruppe www-data
.
Jetzt sollten die Dateien, die Sie mit nginx bereitstellen möchten, die richtigen Berechtigungen haben. Nginx sollte Berechtigungen zum Lesen der Dateien haben. Sie können der Gruppe www-data
Leserechte für eine Datei wie diese:
chown :www-data my-file.html
http://linux.die.net/man/1/chown
mit chown
können Sie den Benutzer und den Gruppenbesitzer einer Datei ändern. In diesem Befehl ändere ich nur die Gruppe. Wenn Sie auch den Benutzer ändern würden, würden Sie den Benutzernamen VOR dem Doppelpunkt angeben, z. B. chown www-data:www-data my-file.html
. Das richtige Festlegen der Gruppenberechtigungen sollte jedoch ausreichen, damit nginx die Datei lesen kann.
Da Nginx die statischen Dateien direkt verarbeitet, muss es auf die entsprechenden Verzeichnisse zugreifen können. Wir müssen ihm ausführbare Berechtigungen für unser Home-Verzeichnis geben.
Der sicherste Weg, dies zu tun, besteht darin, den Nginx-Benutzer unserer eigenen Benutzergruppe hinzuzufügen. Anschließend können wir den Gruppenbesitzern unseres Ausgangsverzeichnisses die ausführbare Berechtigung hinzufügen, sodass Nginx gerade genug Zugriff hat, um die Dateien bereitzustellen:
Sudo usermod -a -G your_user nginx
chmod 710/home/your_user
für akzeptierte Antwort
Sudo chown -R :www-data static_folder
zum Ändern des Gruppenbesitzers aller Dateien in diesem Ordner
Nachdem ich mich in sehr nützliche Antworten vertieft hatte, beschloss ich, alles, was mit Berechtigungen zu tun hat, als Rezept zu sammeln. Insbesondere die einfachste Lösung mit maximaler Sicherheit (= minimale Berechtigungen).
admin
bereit, das heißt, sie besitzt das Site-Verzeichnis und alles darin. Wir wollen nicht nginx als diesen Benutzer ausführen (zu viele Berechtigungen). Es ist in Ordnung zum Testen, nicht zum Testen.nginx
aus, dh config enthält Zeile user nginx
nginx
in der Gruppe mit demselben Namen: nginx
.nginx
minimale Berechtigungen erteilen, ohne den Dateibesitz zu ändern. Dies scheint die sicherste der naiven Optionen zu sein.Um statische Dateien bereitzustellen, sollten die minimal erforderlichen Berechtigungen in der Ordnerhierarchie (siehe die Gruppenberechtigungen) wie folgt lauten (verwenden Sie den Befehl namei -l /home/admin/WebProject/site/static/hmenu.css
):
dr-xr-xr-x root root /
drwxr-xr-x root root home
drwxr-x --- admin nginx admin
drwx - x --- admin nginx WebProject
drwx - x --- admin nginx site
drwx - x --- admin nginx static
- rwxr ----- admin nginx hmenu.css
Wie bekomme ich als nächstes dieses schöne Bild? Um den Gruppeneigentum für dirs zu ändern, wenden wir zuerst Sudo chown :nginx /home/admin/WebProject/site/static
An und wiederholen dann den Befehl, bei dem dirs einzeln von rechts entfernt werden.
Um die Berechtigungen für Verzeichnisse zu ändern, wenden wir Sudo chmod g+x /home/admin/WebProject/site/static
An und entfernen erneut Verzeichnisse.
Ändern Sie die Gruppe für die Dateien im Verzeichnis/static: Sudo chown -R :nginx /home/admin/WebProject/site/static
Ändern Sie abschließend die Berechtigungen für die Dateien im Verzeichnis/static: Sudo chmod g+r /home/admin/WebProject/site/static/*
(Natürlich kann man eine dedizierte Gruppe erstellen und den Benutzernamen ändern, aber dies würde die Erzählung mit unwichtigen Details verdecken.)
Das Setzen von Benutzer root in nginx kann sehr gefährlich sein. Das Festlegen von Berechtigungen für die gesamte Dateihierarchie kann umständlich sein (stellen Sie sich vor, der vollständige Pfad des Ordners befindet sich in mehr als 10 Unterordnern).
Was ich tun würde, ist, den Ordner, den Sie freigeben möchten, unter/usr/share/nginx/any_folder_name mit Berechtigungen für den konfigurierten Benutzer von nginx (normalerweise www-data) zu spiegeln. Das kannst du mit bindfs machen.
In Ihrem Fall würde ich tun:
Sudo bindfs -u www-data -g www-data /root/downloads/boxes/ /usr/share/nginx/root_boxes
Es wird/root/downloads/boxes in/usr/share/nginx/root_boxes mit allen Berechtigungen für Benutzer-WWW-Daten einhängen. Jetzt legen Sie diesen Pfad in Ihrer Standortblockkonfiguration fest
location /static {
autoindex on;
alias /usr/share/nginx/root_boxes/;
}
Für mich war SElinux, ich musste folgendes ausführen: (RHEL/Centos auf AWS)
Sudo setsebool -P httpd_can_network_connect on
chcon -Rt httpd_sys_content_t /var/www/