Erreur nginx 403: l'index de répertoire de [dossier] est interdit

j'ai 3 noms de domaines et j'essaie d'héberger les 3 sites sur un seul serveur (une gouttelette D'océan numérique) en utilisant Nginx.

mysite1.nom mysite2.nom mysite3.nom

un seul d'entre eux fonctionne. Les deux autres résultat erreurs 403 (de la même manière).

dans mon journal d'erreurs nginx, je vois: [error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden .

ma config compatible avec les sites est:

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

les 3 sites sont presque identiques les fichiers de configuration.

de Chaque site fichiers sont dans des dossiers comme /usr/share/nginx/mysite1.nom/mondossier, puis /usr/share/nginx/mysite1.nom/live est un lien symbolique. (Idem pour mysite2 et mysite3.)

j'ai regardé nginx 403 Interdit pour tous les fichiers mais cela n'a pas aidé.

des idées sur ce qui pourrait être mal?

115
demandé sur Community 2013-10-10 05:00:28

15 réponses

si vous avez désactivé l'indexation du répertoire, et que vous avez ce problème, c'est probablement parce que les fichiers try_files que vous utilisez ont une option de répertoire:

location / {
  try_files $uri $uri/ /index.html index.php;
}                 ^ that is the issue

retirez-le et il devrait fonctionner:

location / {
  try_files $uri /index.html index.php;
} 

D'après ce que je vois, c'est causé parce que nginx va essayer d'indexer le répertoire, et être bloqué par lui-même. Jeter l'erreur mentionnée par L'OP.

81
répondu JCM 2017-08-31 20:11:48

si vous essayez simplement de lister le contenu d'un répertoire, utilisez autoindex on; comme:

location /somedir {
       autoindex on;
}
49
répondu maz 2013-11-15 18:11:22

Voici la configuration qui fonctionne:

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     ^/(.+)/$ / 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;
    }

}

alors la seule sortie dans le navigateur était une erreur Laravel: "Oups, on dirait que quelque chose a mal tourné."

ne pas exécuter chmod -R 777 app/storage ( note ). Rendre quelque chose accessible en écriture est une mauvaise sécurité.

chmod -R 755 app/storage fonctionne et est plus sûr.

49
répondu Ryan 2018-07-23 19:32:39

j'ai rencontré une erreur similaire

--- "403 Forbidden" dans la page

--- "13: Permission refusée" dans le journal des erreurs à /var/log/NGINX / error.log

ci-dessous 3 Pas travaillés pour moi:

1: Ouvrez le Terminal, a vu quelque chose comme ci-dessous

user1@comp1:/home/www/

donc, mon nom d'utilisateur est " user1 "(d'en haut)

2: Changement d'utilisateur dans /etc/nginx/nginx.conf

# user www-data;
user user1;

3: Reloaded, la nginx

sudo nginx -s reload  

de plus, j'ai appliqué les permissions de fichier/dossier (avant de faire plus de 3 étapes)

(755 à mon répertoire, par exemple /dir1/) & (644 pour les fichiers dans ce répertoire):

(je ne suis pas sûr, si cette étape supplémentaire qui est vraiment nécessaire, juste au-dessus de 3 étapes peut être suffisant):

chmod 755 ./dir1/
chmod 644 ./dir1/*.*

Espérons que cela aide quelqu'un rapide. Le meilleur de la chance.

17
répondu Manohar Reddy Poreddy 2015-12-29 20:56:48

j'ai eu le même problème, le journal m'a montré cette erreur:

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"

j'héberge une application PHP avec cadre codeignitor. Quand j'ai voulu pour afficher les fichiers téléchargés, j'ai reçu un 403 Error .

le problème était que le nginx.conf n'était pas correctement défini. Au lieu de

index index.html index.htm index.php

je n'ai pas compris

index index.php

j'ai un index.php dans ma racine et j'ai pensé que c'était assez, j'ai eu tort ;) L'indice m'a donné NginxLibrary

7
répondu theDrifter 2016-03-30 13:21:53

En fait, il ya plusieurs choses que vous devez vérifier. 1. Vérifiez l'état de fonctionnement de votre nginx

ps -ef|grep nginx

ps aux|grep nginx|grep -v grep

ici, nous devons vérifier qui exécute nginx. s'il vous plaît se souvenir de l'utilisateur et du groupe

  1. vérifier l'état d'accès du dossier

    ls-alt

  2. comparez avec l'état du dossier avec

    " 1519150920 de nginx"

(1) si l'état d'accès du dossier n'est pas correct

sudo chmod 755 /your_folder_path

(2) si l'utilisateur et le groupe du dossier ne sont pas les mêmes que ceux de nginx

sudo chown your_user_name:your_group_name /your_folder_path

et changer le nom d'utilisateur et le groupe NGINX

nginx -h

pour trouver où se trouve le fichier de configuration de nginx

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

parce que l'utilisateur de Nginx running par défaut n'est personne et que le groupe n'est personne. si nous n'avons pas remarqué cet utilisateur et ce groupe, 403 sera présenté.

6
répondu Haimei 2015-02-24 04:23:07

si vous essayez simplement de lister le contenu d'un répertoire, utilisez autoindex on; comme:

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;
        }
}
5
répondu maz 2013-11-15 18:08:27

, Vous pourriez obtenir ce à cause de Nginx politique (par exemple. "deny"), ou vous pourriez obtenir ceci à cause de la mauvaise configuration de Nginx, ou vous pourriez obtenir ceci à cause des restrictions du système de fichiers.

vous pouvez déterminer si c'est la dernière (et peut-être voir la preuve d'une mauvaise configuration en utilisant strace (sauf, L'OP n'aura pas accès à cela):

# 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

ici j'inspecte l'activité du système de fichiers faite par nginx pendant un test (j'ai eu la même erreur comme vous).

Voici une partie sélectionnée de ma configuration à l'époque

    location /kibana/3/ {
        alias /var/www/html/kibana;
        index index.html;
    }

dans mon cas, comme strace le montre très clairement, la jonction de dans le " alias "à l '"index" n'était pas ce à quoi je m'attendais, et il semble que je doive prendre l'habitude de toujours ajouter des noms de répertoires avec a/, donc dans mon cas, ce qui suit a fonctionné:

    location /kibana/3/ {
        alias /var/www/html/kibana/;
        index index.html;
    }
5
répondu Cameron Kerr 2015-09-26 19:06:18

ça ressemble à un problème de permissions.

essayez de définir toutes les permissions comme vous l'avez fait dans mysite1 pour les autres sites.

par défaut, les permissions de fichiers devraient être 644 et 755. Vérifiez également si l'utilisateur qui exécute nginx a la permission de lire ces fichiers et dirs.

2
répondu Tomahock 2013-10-10 01:21:29

changez le try_files pour pointer vers le index.php chemin, dans le "Laravel" que vous avez mentionné qu'il devrait être quelque chose comme ceci

location / {
    try_files $uri $uri/ /public/index.php$request_uri;
}

et dans le projet" codeigniter "essayer comme ceci

location / {
    try_files $uri $uri/ /public_web/index.php$request_uri;
}
2
répondu Mohammad AbuShady 2013-10-10 08:13:34

vous devez exécuter la permission sur votre répertoire de fichiers statiques. Ils doivent également être chown'ed par votre Utilisateur et groupe nginx.

2
répondu Rhys 2013-10-11 07:44:02

parce que vous utilisez php-fpm , vous devez vous assurer que php-fpm utilisateur est le même que nginx utilisateur.

cochez /etc/php-fpm.d/www.conf et définissez l'utilisateur et le groupe php à nginx si ce n'est pas le cas.

Le php-fpm les besoins de l'utilisateur l'autorisation d'écriture.

2
répondu Ali Hashemi 2017-04-08 19:58:32
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"    

J'exécutais Ubuntu 15.10 et j'ai rencontré la 403 erreur interdite pour une raison simple. Dans le nginx.conf (fichier de configuration pour nginx), l'utilisateur était 'www-data'. Une fois que j'ai changé le nom d'utilisateur en [mon nom d'utilisateur], cela a bien fonctionné en supposant que les permissions nécessaires ont été données à mon nom d'utilisateur. Étapes suivies par moi:

chmod 755 /path/to/your/app    

mon fichier de configuration ressemble à ceci:

**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
répondu Raunaq Kochar 2016-02-17 12:45:51
location ~* \.php$ {
    ...
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;    
}

Modifier la valeur par défaut

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

à

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

a résolu mon problème.

1
répondu wave_1102 2016-03-02 15:54:17

pour moi le problème était que toutes les routes autres que la route de base fonctionnaient, ajoutant cette ligne a corrigé mon problème:

index           index.php;

Plein de chose:

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
répondu zeros-and-ones 2018-02-12 05:50:59