it-swarm.com.de

Nginx dient statische Datei und wurde 403 verboten

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

46
isaacselement

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.

55
gitaarik

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

9
sandes

für akzeptierte Antwort

Sudo chown -R :www-data static_folder

zum Ändern des Gruppenbesitzers aller Dateien in diesem Ordner

6
masternone

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).

  1. Angenommen, wir stellen die Site als Benutzer 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.
  2. Standardmäßig führt Nginx Worker als Benutzer nginx aus, dh config enthält Zeile user nginx
  3. Standardmäßig befindet sich Benutzer nginx in der Gruppe mit demselben Namen: nginx.
  4. Wir möchten dem Benutzer nginx minimale Berechtigungen erteilen, ohne den Dateibesitz zu ändern. Dies scheint die sicherste der naiven Optionen zu sein.
  5. 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

  6. 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.

  7. Um die Berechtigungen für Verzeichnisse zu ändern, wenden wir Sudo chmod g+x /home/admin/WebProject/site/static An und entfernen erneut Verzeichnisse.

  8. Ändern Sie die Gruppe für die Dateien im Verzeichnis/static: Sudo chown -R :nginx /home/admin/WebProject/site/static

  9. Ä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.)

4

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/;
  }
1
roj4s

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/
0
Joe