Ich habe 3 Domain-Namen und versuche, alle 3 Sites mit Nginx auf einem Server (einem Digital Ocean-Droplet) zu hosten.
mysite1.name mysite2.name mysite3.name
Nur 1 von ihnen funktioniert. Die anderen beiden führen zu 403 Fehlern (auf die gleiche Weise).
In meinem Nginx-Fehlerprotokoll sehe ich : [error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden
.
Meine Site-fähige Konfiguration lautet:
server {
server_name www.mysite2.name;
return 301 $scheme://mysite2.name$request_uri;
}
server {
server_name mysite2.name;
root /usr/share/nginx/mysite2.name/live/;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.html index.php;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Alle 3 Sites haben nahezu identische Konfigurationsdateien.
Die Dateien jeder Site befinden sich in Ordnern wie /usr/share/nginx/mysite1.name/someFolder, und dann ist /usr/share/nginx/mysite1.name/live ein Symlink dazu. (Gleiches gilt für mysite2 und mysite3.)
Ich habe mir Nginx 403 für alle Dateien verboten angesehen, aber das hat nicht geholfen.
Irgendwelche Ideen, was falsch sein könnte?
index.html
index.php
Dateien fehlen. Haben Sie sichergestellt, dass sie in diesem Ordner vorhanden sind?root
sein/Users/myUsername/code/app
statt/Users/myUsername/code/app/public
.Antworten:
Wenn die Verzeichnisindizierung deaktiviert ist und dieses Problem auftritt, liegt dies wahrscheinlich daran, dass die von Ihnen verwendeten try_files über eine Verzeichnisoption verfügen:
Entfernen Sie es und es sollte funktionieren:
Warum passiert das?
TL; DR: Dies wird verursacht, weil nginx versucht, das Verzeichnis zu indizieren, und von selbst blockiert wird. Wirft den von OP erwähnten Fehler.
try_files $uri $uri/
bedeutet, versuchen Sie aus dem Stammverzeichnis die Datei, auf die dasuri
zeigt. Wenn dies nicht vorhanden ist, versuchen Sie stattdessen ein Verzeichnis (daher das/
). Wenn nginx auf ein Verzeichnis zugreift, versucht es, es zu indizieren und die Liste der darin enthaltenen Dateien an den Browser / Client zurückzugeben. Standardmäßig ist die Verzeichnisindizierung jedoch deaktiviert. Daher wird der Fehler "Nginx 403 error: Verzeichnisindex von [Ordner]" zurückgegeben. ist verboten".Die Verzeichnisindizierung wird über die
autoindex
Option https://nginx.org/en/docs/http/ngx_http_autoindex_module.html gesteuertquelle
try_files
es nicht versuchteindex.php
, ich bekam immer wieder 403 mit "Verzeichnisindex von ... ist verboten"$uri/
ein Problem schafft?try_files $uri $uri/
bedeutet, dass Sie vom Webstamm aus die Datei versuchen, auf die die URL zeigt. Wenn diese nicht vorhanden ist, versuchen Sie stattdessen ein Verzeichnis (daher das/
). Wenn nginx auf ein Verzeichnis zugreift, versucht es, es zu indizieren und die Liste der darin enthaltenen Dateien an den Browser / Client zurückzugeben. Standardmäßig ist die Verzeichnisindizierung jedoch deaktiviert. Daher wird der Fehler "Nginx 403 error: Verzeichnisindex von [Ordner]" zurückgegeben. ist verboten". Die Verzeichnisindizierung wird durch dieautoindex
Option gesteuert : nginx.org/en/docs/http/ngx_http_autoindex_module.htmlHier ist die Konfiguration, die funktioniert:
Dann war die einzige Ausgabe im Browser ein Laravel-Fehler: "Hoppla, es sieht so aus, als ob etwas schief gelaufen ist."
NICHT ausführen
chmod -R 777 app/storage
( Hinweis ). Etwas weltweit beschreibbar zu machen, ist schlechte Sicherheit.chmod -R 755 app/storage
funktioniert und ist sicherer.quelle
www-data
in Debian. Setzen Sie dann noch strengere Berechtigungen für den Ordner wie:chmod -R 640 app/storage
dannchown -R :www-data app/storage
. Auf diese Weise sind die Dateien nur für den App-Besitzer und den Webserver sichtbar. Und niemand kann eine der gespeicherten (möglicherweise hochgeladenen) Dateien direkt ausführen. Nginx sollte nur eine Leseberechtigung benötigen, um auf die Dateien zugreifen zu können.public/
aufroot /usr/share/nginx/mysitename/public/;
. Nach dem Hinzufügenpublic/
und Ausführenservice nginx restart
hat es funktioniert.Wenn Sie nur versuchen, Verzeichnisinhalte aufzulisten, verwenden Sie
autoindex on;
Folgendes:quelle
autoindex on
; Es wäre eine schlechte Idee, meinen Verzeichnisinhalt der Öffentlichkeit zugänglich zu machen.Ich habe einen ähnlichen Fehler festgestellt
--- "403 Verboten" auf der Webseite
--- "13: Berechtigung verweigert" im Fehlerprotokoll unter /var/log/nginx/error.log
Die folgenden 3 Schritte haben für mich funktioniert:
1: Terminal öffnen, so etwas wie unten gesehen
Mein Benutzername ist also "user1" (von oben)
2: Geänderter Benutzer in /etc/nginx/nginx.conf
3: Den Nginx neu geladen
Außerdem habe ich Datei- /
Ordnerberechtigungen angewendet (bevor ich die obigen drei Schritte ausgeführt habe) (755 in meinem Verzeichnis, z. B. / dir1 /) & (644 für Dateien in diesem Verzeichnis):
(Ich bin nicht sicher, ob dieser zusätzliche Schritt wirklich ausgeführt wird erforderlich, knapp über 3 Schritte könnten ausreichen):
Hoffe das hilft schnell jemandem. Viel Glück.
quelle
In der Tat gibt es mehrere Dinge, die Sie überprüfen müssen. 1. Überprüfen Sie den Betriebsstatus Ihres Nginx
Hier müssen wir überprüfen, wer Nginx ausführt. Bitte denken Sie an den Benutzer und die Gruppe
Überprüfen Sie den Zugriffsstatus des Ordners
ls -alt
Vergleichen Sie den Status des Ordners mit dem von Nginx
(1) wenn der Zugriffsstatus des Ordners nicht richtig ist
(2) wenn der Benutzer und die Gruppe des Ordners nicht mit denen von nginx identisch sind
und ändern Sie den laufenden Benutzernamen und die Gruppe von nginx
um herauszufinden, wo sich die Nginx-Konfigurationsdatei befindet
Weil der Benutzer von nginx default running niemand ist und die Gruppe niemand ist. Wenn wir diesen Benutzer und diese Gruppe nicht bemerkt haben, wird 403 eingeführt.
quelle
Ich hatte das gleiche Problem, die Protokolldatei zeigte mir diesen Fehler:
Ich hoste eine PHP-App mit Codeignitor-Framework. Als ich hochgeladene Dateien anzeigen wollte, erhielt ich eine
403 Error
.Das Problem war, dass das
nginx.conf
nicht richtig definiert war. AnstattIch habe nur eingeschlossen
Ich habe eine index.php in meinem root und ich dachte das wäre genug, ich habe mich geirrt;) Der Hinweis gab mir NginxLibrary
quelle
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
index index.html index.htm index.php;
Möglicherweise erhalten Sie dies aufgrund einer Nginx-Richtlinie (z. B. "Verweigern") oder aufgrund einer Nginx-Fehlkonfiguration oder aufgrund von Dateisystemeinschränkungen.
Sie können mithilfe von strace feststellen, ob dies der spätere ist (und möglicherweise Hinweise auf eine Fehlkonfiguration anzeigen (außer, das OP hat keinen Zugriff darauf):
Hier überprüfe ich die Dateisystemaktivität von nginx, während ein Test ausgeführt wurde (ich hatte den gleichen Fehler wie Sie).
Hier ist ein ausgewählter Teil meiner Konfiguration zu der Zeit
In meinem Fall war, wie strace ganz deutlich zeigt, das Zusammenfügen des "Alias" mit dem "Index" nicht das, was ich erwartet hatte, und es scheint, dass ich mir angewöhnen muss, Verzeichnisnamen immer mit einem / zu versehen In meinem Fall hat Folgendes funktioniert:
quelle
/home/web/public
. Warum nginx versucht, auf diese nicht gefundenen Dateien zuzugreifen, liegt daran, dass ich vergessen habe, diese Zeile zu entfernen,index index.html index.htm index.nginx-debian.html;
da sich diese Dateien nicht in meinem öffentlichen Verzeichnis befinden.Es sieht nach einem Berechtigungsproblem aus.
Versuchen Sie, alle Berechtigungen wie in mysite1 für die andere Site festzulegen.
Standardmäßig sollten die Dateiberechtigungen 644 und dirs 755 sein. Überprüfen Sie auch, ob der Benutzer, der nginx ausführt, die Berechtigung zum Lesen dieser Dateien und dirs hat.
quelle
Ändern Sie das
try_files
, um auf denindex.php
Pfad zu zeigen, in dem von Ihnen erwähnten "Laravel" sollte es so etwas seinUnd im "Codeigniter" -Projekt versuchen Sie es so
quelle
Da Sie verwenden
php-fpm
, sollten Sie sicherstellen, dass derphp-fpm
Benutzer mit demnginx
Benutzer identisch ist .Überprüfen Sie
/etc/php-fpm.d/www.conf
und stellen Sie PHP-Benutzer und Gruppe auf ein,nginx
wenn dies nicht der Fall ist .Der
php-fpm
Benutzer benötigt eine Schreibberechtigung.quelle
Sie benötigen eine Ausführungsberechtigung für Ihr statisches Dateiverzeichnis. Außerdem müssen sie von Ihrem Nginx-Benutzer und Ihrer Gruppe chown'ed werden.
quelle
Standard ändern
zu
löste mein Problem.
quelle
Ich habe Ubuntu 15.10 ausgeführt und bin aus einem einfachen Grund auf den Fehler 403 Forbidden gestoßen. In der Datei nginx.conf (Konfigurationsdatei für nginx) war der Benutzer 'www-data'. Nachdem ich den Benutzernamen in [meinen Benutzernamen] geändert hatte, funktionierte dies einwandfrei, vorausgesetzt, die erforderlichen Berechtigungen wurden für meinen Benutzernamen erteilt. Von mir verfolgte Schritte:
Meine Konfigurationsdatei sieht folgendermaßen aus:
quelle
Für mich war das Problem, dass alle anderen Routen als die Basisroute funktionierten. Durch Hinzufügen dieser Linie wurde mein Problem behoben:
Volle Sache:
quelle
Um dieses Problem zu beheben, habe ich eine ganze Nacht verbracht. Hier sind meine zwei Cent für diese Geschichte:
Dies ist eine Randnotiz: Wenn Sie MySQL verwenden und Verbindungen von hhvm zu MySQL nicht mehr möglich sind, überprüfen Sie, ob Apparmor installiert ist. deaktiviere es.
quelle
Ich habe mein Problem gelöst, wenn ich wie folgt konfiguriere:
Es wird der 403-Fehler angezeigt.
Ich habe es versucht
autoindex on
, aber es funktioniert nicht. Wenn ich meine Konfiguration so ändere, funktioniert es.Ich denke die genaue Übereinstimmung, wenn es ein Pfad ist, sollte ein Verzeichnis sein.
quelle
Wenn Sie die Verzeichnisoption beibehalten möchten, können Sie die index.php wie folgt vor $ uri setzen.
quelle