Ich habe 3 Domainnamen und versuche, alle 3 Sites auf einem Server (ein Digital-Ocean-Droplet) mit Nginx zu hosten.
mysite1.namemysite2.namemysite3.name
Nur 1 von ihnen arbeitet. Die anderen beiden führen zu 403 Fehlern (auf dieselbe Weise).
In meinem Nginx-Fehlerprotokoll sehe ich: [error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden
.
Meine für Sites aktivierte 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 verfügen über 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 für mysite2 und mysite3.)
Ich habe Nginx 403 für alle Dateien verboten, aber das hat nicht geholfen.
Irgendwelche Ideen, woran das liegen könnte?
server {
server_name www.mysite2.name;
return 301 $scheme://mysite2.name$request_uri;
}
server {
#This config is based on https://github.com/daylerees/laravel-website-configs/blob/6db24701073dbe34d2d58fea3a3c6b3c0cd5685b/nginx.conf
server_name mysite2.name;
# The location of our project's public directory.
root /usr/share/nginx/mysite2/live/public/;
# Point index to the Laravel front controller.
index index.php;
location / {
# URLs to attempt, including pretty ones.
try_files $uri $uri/ /index.php?$query_string;
}
# Remove trailing slash to please routing system.
if (!-d $request_filename) {
rewrite ^/(.+)/$ /$1 permanent;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Die einzige Ausgabe im Browser war dann ein Laravel-Fehler: "Whoops, sieht aus, als wäre etwas schief gelaufen."
Führen Sie NICHT chmod -R 777 app/storage
( note ) aus. Etwas in der Welt beschreibbar zu machen ist schlechte Sicherheit.
chmod -R 755 app/storage
funktioniert und ist sicherer.
Wenn die Verzeichnisindizierung deaktiviert ist und dieses Problem auftritt, liegt dies wahrscheinlich daran, dass die von Ihnen verwendeten try_files eine Verzeichnisoption haben:
location / {
try_files $uri $uri/ /index.html index.php;
} ^ that is the issue
Entfernen Sie es und es sollte funktionieren:
location / {
try_files $uri /index.html index.php;
}
Nach allem, was ich sehen kann, liegt dies daran, dass nginx versucht, das Verzeichnis zu indexieren und von sich aus blockiert wird. Fehler vom OP gemeldet.
Wenn Sie lediglich versuchen, Verzeichnisinhalte aufzulisten, verwenden Sie autoindex on;
wie folgt:
location /somedir {
autoindex on;
}
Ich bin auf einen ähnlichen Fehler gestoßen
--- "403 verboten" auf der Webseite
--- "13: Berechtigung verweigert" im Fehlerprotokoll unter /var/log/nginx/error.log
Unten haben 3 Schritte für mich gearbeitet:
[email protected]:/home/www/
Mein Benutzername ist also "user1" (von oben)
# user www-data;
user user1;
Sudo nginx -s reload
Außerdem habe ich Datei-/Ordnerberechtigungen angewendet (bevor ich die obigen 3 Schritte ausgeführt habe).
(755 in meinem Verzeichnis, sagen Sie/dir1 /) & (644 für Dateien in diesem Verzeichnis):
(Ich bin nicht sicher, ob dieser zusätzliche Schritt wirklich erforderlich ist, knapp über 3 Schritten könnten ausreichen.):
chmod 755 ./dir1/
chmod 644 ./dir1/*.*
Hoffe das hilft jemandem schnell. Viel Glück.
Ich hatte das gleiche Problem, das Logfile zeigte mir diesen Fehler:
2016/03/30 14:35:51 [error] 11915#0: *3 directory index of "path_scripts/viewerjs/" is forbidden, client: IP.IP.IP.IP, server: domain.com, request: "GET /scripts/viewerjs/ HTTP/1.1", Host: "domain", referrer: "domain.com/new_project/do_update"
Ich hoste eine PHP -App mit Codeignitor-Framework. Als ich hochgeladene Dateien anzeigen wollte, erhielt ich einen 403 Error
.
Das Problem war, dass der nginx.conf
nicht richtig definiert wurde. Anstatt
index index.html index.htm index.php
ich habe nur eingeschlossen
index index.php
Ich habe eine index.php in meiner Wurzel und ich dachte, das war genug, ich war falsch;) Der Hinweis gab mir NginxLibrary
In der Tat gibt es mehrere Dinge, die Sie überprüfen müssen. 1. Überprüfen Sie den Status Ihres Nginx
ps -ef|grep nginx
ps aux|grep nginx|grep -v grep
Hier müssen wir überprüfen, wer nginx ausführt. bitte merken sie sich den benutzer und die gruppe
Überprüfen Sie den Zugriffsstatus des Ordners
ls -alt
vergleiche mit dem Status des Ordners mit Nginx
(1) Wenn der Zugriffsstatus des Ordners nicht richtig ist
Sudo chmod 755 /your_folder_path
(2) Wenn Benutzer und Gruppe des Ordners nicht mit denen von Nginx übereinstimmen
Sudo chown your_user_name:your_group_name /your_folder_path
und ändern Sie den laufenden Benutzernamen und die Gruppe von nginx
nginx -h
um herauszufinden, wo sich die Konfigurationsdatei von nginx befindet
Sudo vi /your_nginx_configuration_file
//in the file change its user and group
user your_user_name your_group_name;
//restart your nginx
Sudo nginx -s reload
Der Benutzer von nginx default running ist niemand und die Gruppe ist niemand. Wenn wir diesen Benutzer und diese Gruppe nicht bemerken, wird 403 eingeführt.
Wenn Sie lediglich versuchen, Verzeichnisinhalte aufzulisten, verwenden Sie autoindex on;
wie folgt:
server {
listen 80;
server_name domain.com www.domain.com;
access_log /var/...........................;
root /path/to/root;
location / {
index index.php index.html index.htm;
}
location /somedir {
autoindex on;
}
}
Möglicherweise wird dies aufgrund einer Nginx-Richtlinie angezeigt (z. B. "deny"), oder aufgrund einer falschen Konfiguration von Nginx oder aufgrund von Einschränkungen des Dateisystems.
Sie können feststellen, ob es der spätere ist (und möglicherweise Hinweise auf eine falsche Konfiguration mit Hilfe von strace sehen (außer, das OP hat keinen Zugriff darauf):
# pidof nginx
11853 11852
# strace -p 11853 -p 11852 -e trace=file -f
Process 11853 attached - interrupt to quit
Process 11852 attached - interrupt to quit
[pid 11853] stat("/var/www/html/kibanaindex.html", 0x7ffe04e93000) = -1 ENOENT (No such file or directory)
[pid 11853] stat("/var/www/html/kibana", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
^CProcess 11853 detached
Process 11852 detached
Hier untersuche 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
location /kibana/3/ {
alias /var/www/html/kibana;
index index.html;
}
In meinem Fall, wie strace ganz deutlich zeigt, war das Anfügen von "Alias" an den "Index" nicht das, was ich erwartet hatte, und es scheint, dass ich mich daran gewöhnen muss, Verzeichnisnamen immer mit einem/anzuhängen In meinem Fall hat folgendes funktioniert:
location /kibana/3/ {
alias /var/www/html/kibana/;
index index.html;
}
Es sieht aus wie ein Problem mit Berechtigungen.
Versuchen Sie, alle Berechtigungen wie in mysite1 für die andere Site festzulegen.
Standardmäßig sollten die Dateiberechtigungen 644 und die Verzeichnisse 755 sein. Überprüfen Sie auch, ob der Benutzer, der nginx ausführt, die Berechtigung zum Lesen dieser Dateien und Verzeichnisse hat.
Da Sie php-fpm
verwenden, sollten Sie sicherstellen, dass php-fpm
-Benutzer mit nginx
-Benutzer identisch ist.
Überprüfen Sie /etc/php-fpm.d/www.conf
und setzen Sie PHP-Benutzer und -Gruppe auf nginx
, falls dies nicht der Fall ist.
Der php-fpm
-Benutzer benötigt Schreibrechte.
location ~* \.php$ {
...
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Standard ändern
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
zu
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
mein Problem gelöst.
Ändern Sie den try_files
, um auf den index.php
-Pfad zu zeigen. In dem von Ihnen erwähnten "Laravel" sollte es ungefähr so aussehen
location / {
try_files $uri $uri/ /public/index.php$request_uri;
}
Und im "Codeigniter" -Projekt versuchen Sie es so
location / {
try_files $uri $uri/ /public_web/index.php$request_uri;
}
Sie benötigen die Ausführungsberechtigung für Ihr statisches Dateiverzeichnis. Sie müssen auch von Ihrem Nginx-Benutzer und Ihrer Gruppe festgelegt werden.
6833#0: *1 directory index of "/path/to/your/app" is forbidden, client: 127.0.0.1, server: lol.com, request: "GET / HTTP/1.1", Host: "localhost"
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' . Sobald ich den Benutzernamen geändert habe [mein Benutzername], es hat gut funktioniert, vorausgesetzt, die erforderlichen Berechtigungen wurden meinem Benutzernamen erteilt.
chmod 755 /path/to/your/app
Meine Konfigurationsdatei sieht so aus:
**user [my username]**;#I made the change here.
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
server {
listen 80;
server_name My_Server;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_redirect off;
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
Um dieses Problem zu beheben, habe ich eine ganze Nacht verbracht. Hier sind meine zwei Cent für diese Geschichte,
Überprüfen Sie, ob Sie hhvm als PHP-Interpreter verwenden. Dann ist es möglich, dass es auf Port 9000 lauscht, sodass Sie die Konfiguration Ihres Webservers ändern müssen.
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.
Ich habe mein Problem gelöst, wenn ich wie folgt konfiguriere:
location = /login {
index login2.html;
}
Der Fehler 403 wird angezeigt.
[error] 4212#2916: *2 directory index of "D:\path/to/login/" is forbidden
Ich habe versucht, autoindex on
, aber nicht funktioniert. Wenn ich meine Konfiguration so ändere, funktioniert es.
location = /login/ {
index login2.html;
}
Ich denke, die genaue Übereinstimmung, wenn es ein Pfad ist, sollte ein Verzeichnis sein.
wenn Sie die Verzeichnisoption beibehalten möchten, können Sie die index.php wie folgt vor $ uri setzen.
try_files /index.php $uri $uri/
Für mich bestand das Problem darin, dass alle anderen Routen als die Basisroute funktionierten. Durch Hinzufügen dieser Zeile wurde mein Problem behoben:
index index.php;
Volle Sache:
server {
server_name example.dev;
root /var/www/example/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
location / {
root fileLocation;
index index.html index.htm;
expires 0;
if_modified_since off;}
Hier habe ich alias
anstelle von root
verwendet und das hat mir den Fehler verursacht. Diese Konfiguration funktioniert gut.