Ошибка Nginx 403: индекс каталога [папки] запрещен


у меня есть 3 доменных имени и я пытаюсь разместить все 3 сайта на одном сервере (цифровая капля океана) с помощью Nginx.

mysite1.название mysite2.название mysite3.имя

работает только 1 из них. Два других приводят к 403 ошибкам (таким же образом).

в моем журнале ошибок nginx я вижу:[error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden.

my sites-enabled config is:

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

все 3 сайта имеют почти одинаковые конфигурационные файлы.

файлы каждого сайта находятся в папках как /usr/share/nginx/mysite1.name /someFolder, а затем/usr/share/nginx/mysite1.name / live является символической ссылкой на это. (То же самое для mysite2 и mysite3.)

Я посмотрел на nginx 403 запрещено для всех файлов, но это не помогло.

любые идеи о том, что может быть не так?

15 115

15 ответов:

Если у вас отключена индексация каталогов и возникла эта проблема, это, вероятно, потому, что у try_files, которые вы используете, есть опция каталога:

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

удалите его и все должно работать:

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

из того, что я вижу, это вызвано тем, что nginx попытается индексировать каталог и будет заблокирован сам по себе. Бросая ошибку, упомянутую OP.

Если вы просто пытаетесь перечислить содержимое каталога, используйте autoindex on; как:

location /somedir {
       autoindex on;
}

вот конфигурация, которая работает:

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

}

тогда единственным выходом в браузере была ошибка Laravel: "Упс, похоже, что-то пошло не так."

не выполнять chmod -R 777 app/storage (Примечание). Создание чего-то пригодного для записи в мире-это плохая безопасность.

chmod -R 755 app/storage строительство и является более безопасным.

я столкнулся с подобной ошибкой
--- "403 запрещено" на веб-странице
--- "13: отказано в разрешении" в журнале ошибок в /var/log/nginx/error.журнал

ниже 3 шаги работали для меня:

1: откройте терминал, увидел что-то вроде ниже

user1@comp1:/home/www/

Итак, мое имя пользователя "user1 "(сверху)

2: изменен пользователь в /etc/nginx / nginx.conf

# user www-data;
user user1;

3: перезагрузка nginx

sudo nginx -s reload  

кроме того, я применил права доступа к файлам/папкам (прежде чем я сделал выше 3 шагов)
(755 в мой каталог, скажем /dir1/) & (644 для файлов в этом каталоге):
(я не уверен, если этот дополнительный шаг действительно требуется, чуть выше 3 шагов может быть достаточно):

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

надеюсь, это поможет быстро кто-то. Желаю удачи.

у меня была та же проблема, файл журнала показал мне эту ошибку:

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"

я размещаю PHP приложение с codeignitor framework. Когда я хотел просмотреть загруженные файлы я получил 403 Error.

проблема была в том, что nginx.conf не был должным образом определен. Вместо

index index.html index.htm index.php

я включил только

index index.php

у меня есть индекс.php в моем корне, и я думал, что этого достаточно, я был неправ ;) Намек дал мне NginxLibrary

на самом деле есть несколько вещей, которые вы должны проверить. 1. проверьте состояние работы вашего nginx

ps -ef|grep nginx

ps aux|grep nginx|grep -v grep

здесь мы должны проверить, кто работает nginx. пожалуйста, помните пользователя и группу

  1. проверьте состояние доступа к папке

    ls-alt

  2. сравнить со статусом папки с nginx в

(1) если состояние доступа к папке не правильно

sudo chmod 755 /your_folder_path

(2) если папки пользователь и группа не совпадают с запуском nginx

sudo chown your_user_name:your_group_name /your_folder_path

и измените имя пользователя и группу nginx

nginx -h

чтобы найти, где находится файл конфигурации 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

потому что пользователь nginx по умолчанию работает никто и группа никто. если мы не замечаем этого пользователя и группы, 403 будет введен.

Если вы просто пытаетесь перечислить содержимое каталога, используйте autoindex on; как:

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

вы можете получить это из-за политики Nginx (например. "deny"), или вы можете получить это из-за неправильной конфигурации Nginx, или вы можете получить это из-за ограничений файловой системы.

вы можете определить, если его позже (и, возможно, увидеть доказательства неправильной конфигурации с помощью strace (за исключением того, что OP не будет иметь доступа к этому):

# 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

здесь я проверяю активность файловой системы, выполненную nginx во время выполнения теста (у меня была та же ошибка, что и у nginx вы.)

вот выбранная часть моей конфигурации в то время

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

в моем случае, как ясно показывает strace, присоединение "псевдонима" к "индексу" было не тем, что я ожидал, и, похоже, мне нужно привыкнуть всегда добавлять имена каталогов с помощью/, поэтому в моем случае сработало следующее:

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

Это похоже на некоторые проблемы с разрешениями.

попробуйте установить все разрешения, как вы сделали в mysite1 на другой сайт.

по умолчанию права доступа к файлам должны быть 644 и dirs 755. Также проверьте, есть ли у пользователя, который запускает nginx, разрешение на чтение этих файлов и dirs.

изменить try_files указать index.php путь, в "Laravel", что вы упомянули это должно быть что-то вроде этого

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

а в проекте" codeigniter " попробуйте вот так

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

вам нужно разрешение на выполнение в вашем каталоге статических файлов. Также они должны быть chown'Ed вашим пользователем и группой nginx.

потому что вы используете php-fpm, вы должны убедиться в том, что php-fpm пользователь такой же, как nginx пользователей.

Регистрация /etc/php-fpm.d/www.conf и установите php user и group в nginx если это не так.

The php-fpm пользователю необходимо разрешение на запись.

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"    

я запускал Ubuntu 15.10 и столкнулся с запрещенной ошибкой 403 по простой причине. В nginx.conf (конфигурационный файл для nginx), пользователь был "www-data". Как только я изменил имя пользователя [имя пользователя], он работал хорошо, предполагая, что необходимые разрешения были даны имя пользователя. Шаги, за которыми следую я:

chmod 755 /path/to/your/app    

мой конфигурационный файл выглядит так:

**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;
    }
}
}
location ~* \.php$ {
    ...
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;    
}

изменить значение по умолчанию

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

до

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

решить мою проблему.

для меня проблема заключалась в том, что любые маршруты, кроме базового маршрута, работали, добавив эту строку, исправил мою проблему:

index           index.php;

полный вещь:

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