Ошибка Nginx 403: указатель каталога в [папке] запрещен
У меня есть 3 имени домена, и я пытаюсь разместить все 3 сайта на одном сервере (цифровая капелька океана) с помощью Nginx.
mysite1.name
mysite2.name
mysite3.name
Только 1 из них работает. Остальные два результата приводят к 403 ошибкам (таким же образом).
В моем журнале ошибок nginx я вижу: [error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden
.
Конфигурация с моими сайтами:
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/mysite 1.name/someFolder, а затем /usr/share/nginx/mysite 1.name/live является символической ссылкой на это. (То же самое для mysite2 и mysite3.)
Я просмотрел Nginx 403 для всех файлов, но это не помогло.
Любые идеи о том, что может быть неправильным?
Ответы
Ответ 1
Вот конфиг, который работает:
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 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;
}
}
Тогда единственным выводом в браузере была ошибка Laravel: "Ой, похоже, что-то пошло не так".
НЕ запускайте приложение chmod -R 777 app/storage
(примечание). Создание чего-то доступного для мира - плохая безопасность.
chmod -R 755 app/storage
работает и более безопасен.
Ответ 2
Если у вас есть индексация каталога и возникает эта проблема, вероятно, из-за того, что у файлов 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.
Ответ 3
Если вы просто пытаетесь autoindex on;
список содержимого каталога, используйте autoindex on;
лайк:
location /somedir {
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;
}
}
Ответ 4
Я столкнулся с аналогичной ошибкой
--- "403 Запрещено" на веб-странице
--- "13: Permission denied" в журнале ошибок в /var/log/nginx/error.log
Ниже мне помогли 3 шага:
1: Открыть терминал, увидеть что-то вроде ниже
[email protected]:/home/www/
Итак, мое имя пользователя "user1" (сверху)
2: Изменен пользователь в /etc/nginx/nginx.conf
# user www-data;
user user1;
3: Перезагрузка nginx
sudo nginx -s reload
Кроме того, я применил разрешения файлов/папок (до того, как я сделал более 3 шагов)
(755 в мой каталог, say/dir1/) и (644 для файлов в этом каталоге):
(я не уверен, что если этот дополнительный шаг действительно необходим, может быть достаточно всего 3 шага):
chmod 755 ./dir1/
chmod 644 ./dir1/*.*
Надеюсь, что это поможет быстрому кому-то. Удачи.
Ответ 5
У меня была такая же проблема, лог файл показал мне эту ошибку:
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. Когда я хотел просмотреть загруженные файлы, я получил 403 Error
.
Проблема заключалась в том, что nginx.conf
не был правильно определен. Вместо
index index.html index.htm index.php
я только включил
index index.php
У меня есть index.php в корне, и я подумал, что этого достаточно, я ошибся;) Намек дал мне NginxLibrary
Ответ 6
На самом деле вам нужно проверить несколько вещей.
1. Проверьте состояние работы nginx.
ps -ef|grep nginx
ps aux|grep nginx|grep -v grep
Здесь нам нужно проверить, кто работает с nginx. пожалуйста, запомните пользователя и группу
-
проверить статус доступа к папке
ls -alt
-
сравните с состоянием папки с 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.
Ответ 7
Вы можете получить это из-за политики 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, когда запускался тест (у меня была такая же ошибка, как и вы).
Здесь выбранная часть моей конфигурации в момент
location /kibana/3/ {
alias /var/www/html/kibana;
index index.html;
}
В моем случае, как ясно показывает strace, соединение в "псевдониме" с "индексом" было не тем, что я ожидал, и, похоже, мне нужно привыкнуть всегда добавлять имена каталогов с помощью /, поэтому в моем случае работало:
location /kibana/3/ {
alias /var/www/html/kibana/;
index index.html;
}
Ответ 8
Если вы просто пытаетесь перечислить содержимое каталога, используйте 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;
}
}
Ответ 9
Он выглядит как проблема с разрешениями.
Попробуйте установить все разрешения, подобные тем, что вы делали в mysite1, на другой сайт.
По умолчанию права доступа к файлам должны быть 644 и dir 755.
Также проверьте, есть ли у пользователя, запускающего nginx, разрешение на чтение этих файлов и dirs.
Ответ 10
Поскольку вы используете php-fpm
, вы должны убедиться, что пользователь php-fpm
совпадает с пользователем nginx
.
Проверьте /etc/php-fpm.d/www.conf
и установите для пользователя и группы php значение nginx
, если это не так.
Пользователю php-fpm
требуется разрешение на запись.
Ответ 11
измените 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;
}
Ответ 12
Вам нужно разрешение на выполнение в каталоге статических файлов. Также они должны быть проверены вашим пользователем и группой nginx.
Ответ 13
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;
решил мою проблему.
Ответ 14
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 Forbidden по простой причине.
В 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;
}
}
}
Ответ 15
Для меня проблема была в том, что работали любые маршруты, кроме базового, добавление этой строки решило мою проблему:
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;
}
}
Ответ 16
Я решил мою проблему, если я настраиваю как следует:
location = /login {
index login2.html;
}
Это покажет ошибку 403.
[error] 4212#2916: *2 directory index of "D:\path/to/login/" is forbidden
Я пробовал autoindex on
, но не работает. Если я изменю свою конфигурацию, как это, это работает.
location = /login/ {
index login2.html;
}
Я думаю, что точное совпадение, если это путь должен быть каталогом.
Ответ 17
когда вы хотите сохранить опцию директории, вы можете поставить index.php перед $ uri, вот так.
try_files /index.php $uri $uri/
Ответ 18
Чтобы исправить эту проблему, я провел целую ночь. Вот мои два цента на эту историю,
Проверьте, используете ли вы hhvm в качестве интерпретатора php. Тогда возможно, что он прослушивает порт 9000, поэтому вам придется изменить конфигурацию вашего веб-сервера.
Это примечание: если вы используете mysql и соединения от hhvm до mysql становятся невозможными, проверьте, установлен ли у вас apparmor. отключи это.
Ответ 19
location / {
root fileLocation;
index index.html index.htm;
expires 0;
if_modified_since off;}
Здесь я использовал alias
вместо root
и это вызвало у меня ошибку. Эта конфигурация работает отлично.