it-swarm.com.de

Fehler Nginx 403: Verzeichnisindex von [Ordner] ist verboten

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?

133
Ryan

Hier ist die Konfiguration, die funktioniert:

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.

58
Ryan

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.

100
JCM

Wenn Sie lediglich versuchen, Verzeichnisinhalte aufzulisten, verwenden Sie autoindex on; wie folgt:

location /somedir {
       autoindex on;
}
50
maz

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:

1: Offenes Terminal, siehe unten

[email protected]:/home/www/

Mein Benutzername ist also "user1" (von oben)

2: Benutzer in /etc/nginx/nginx.conf geändert

# user www-data;
user user1;

3: Laden Sie den Nginx neu

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.

18

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

7
theDrifter

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

  1. Überprüfen Sie den Zugriffsstatus des Ordners

    ls -alt

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

6
Haimei

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;
        }
}
6
maz

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;
    }
6
Cameron Kerr

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.

3
Tomahock

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.

3
Ali Hashemi
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.

2
wave_1102

Ä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;
}
2

Sie benötigen die Ausführungsberechtigung für Ihr statisches Dateiverzeichnis. Sie müssen auch von Ihrem Nginx-Benutzer und Ihrer Gruppe festgelegt werden.

2
Rhys
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;
    }
}
}
1
Raunaq Kochar

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.

0
user9869932

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.

0
robin ong

wenn Sie die Verzeichnisoption beibehalten möchten, können Sie die index.php wie folgt vor $ uri setzen.

try_files /index.php $uri $uri/
0
xoyabc

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;
    }
}
0
zeros-and-ones
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.

0
Credoz