php — Индекс каталога Nginx «/var/www/html/» запрещен
У меня есть приложение PHP, но я не могу заставить Nginx работать с ним. Я проверил разрешения и конфигурацию nginx, но не могу найти проблему.
/etc/nginx/nginx.conf
# Для получения дополнительной информации о настройке см.:
# * Официальная документация на английском языке: http://nginx.org/en/docs/
# * Официальная русскоязычная документация: http://nginx.org/ru/docs/
пользователь nginx;
рабочие_процессы авто;
журнал_ошибок /var/log/nginx/error.log;
pid /run/nginx.pid;
# Загрузить динамические модули. См. /usr/share/doc/nginx/README.dynamic.
включить /usr/share/nginx/modules/*.conf;
События {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$статус $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
журнал_доступа /var/log/nginx/access.log основной;
отправить файл включен;
tcp_nopush включен;
tcp_nodelay включен;
keepalive_timeout 65;
типы_хэш_макс_размер 2048;
включить /etc/nginx/mime.
types;
default_type application/octet-stream;
# Загрузите файлы модульной конфигурации из каталога /etc/nginx/conf.d.
# См. http://nginx.org/en/docs/ngx_core_module.html#include
# Чтобы получить больше информации.
включить /etc/nginx/conf.d/*.conf;
сервер {
слушать 80 default_server;
слушать [::]:80 default_server;
имя сервера _;
корень /var/www/html;
# Загрузить файлы конфигурации для блока сервера по умолчанию.
включить /etc/nginx/default.d/*.conf;
расположение / {
}
страница_ошибки 404 /404.html;
местоположение = /404.html {
}
error_page 500 502 503 504 /50x.html;
местоположение = /50x.html {
}
}
# Настройки для сервера с поддержкой TLS.
#
# сервер {
# слушаем 443 ssl http2 default_server;
# слушать [::]:443 ssl http2 default_server;
# имя сервера _;
# корень /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.
key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10 м;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # Загрузить файлы конфигурации для блока сервера по умолчанию.
# include /etc/nginx/default.d/*.conf;
#
# расположение / {
# }
#
# error_page 404 /404.html;
# местоположение = /404.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# местоположение = /50x.html {
# }
# }
9/(config|temp|журналы)/ {
отрицать все;
}
расположение ~/\. {
отрицать все;
доступ_лог выключен;
log_not_found выключен;
}
расположение ~ \.php$ {
включить /etc/nginx/fastcgi_params;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Мои разрешения
/var/www/html dr-xr-xr-x корень корень / drwxr-xr-x nginx nginx переменная drwxr-xr-x nginx nginx www drwxr-xr-x nginx nginx HTML
Теперь, когда я захожу на свой веб-сайт, я получаю загрузку файла index.
php. Я знаю, что это проблема с PHP. На сервере Apache я бы проверил обработчик, владельца и разрешения, но с nginx я не уверен, что делать. Мои разрешения выглядят нормально
stat /var/www/html/index.php Файл: '/var/www/html/index.php' Размер: 12843 Блоки: 32 Блок ввода-вывода: 4096 обычный файл Устройство: f650b601h/4132484609d Инод: 138577 Ссылки: 1 Доступ: (0644/-rw-r--r--) Uid: (997/nginx) Gid: (993/nginx)
Когда я захожу в каталог установщика своего приложения, который находится в /var/www/html/installer, появляется ошибка 403
Мой журнал ошибок
2021/02/11 22:12:56 [ошибка] 23013# 0: *43 индекс каталога «/var/www/html/installer/» запрещен, клиент: xx.254.113.xx, сервер: _, запрос: «GET /installer/ HTTP/1.1», хост: «www. xxx.com»
php -v PHP 7.4.15 (cli) (построено: 2 февраля 2021 г., 14:19:57) (NTS) Авторское право (c) Группа PHP Zend Engine v3.4.0, авторское право (c) Zend Technologies
Кто-нибудь может указать на мою проблему? Я действительно думаю, что это PHP, потому что я пробовал несколько разных конфигураций для своих файлов nginx.
сервер — 403 Запрещено: индекс каталога «/path/to/files» запрещен Nginx
Я хочу быть очень осторожным здесь, потому что мне просто пришлось уничтожить весь мой сервер и построить заново с нуля (полный кошмар), потому что я попытался исправить эту ошибку, следуя совету, например
sudo chown -R пользователь: пользователь * sudo chmod 755 [имя каталога] судо чмод 644 *
и в конечном итоге сильно испортил мои разрешения и сломал всю систему Ubuntu.
Я также последовал совету из других подобных вопросов, чтобы удалить второй $uri из моей конфигурации Nginx, и это не решило проблему.
Мой user1 имеет привилегии root, предоставленные usermod -aG sudo user1
Мой журнал ошибок Nginx говорит
06.03.2019 17:45:40 [ошибка] *1 индекс каталога "/home/user1/app/src/apr/" запрещен
И мое доменное имя показывает
403 Запрещено
пс -эф | grep nginx возвращает
root 15419 1 0 17:45 ? 00:00:00 nginx: главный процесс /usr/sbin/nginx -g демон включен; master_process включен; www-данные 15420 15419 0 17:45 ? 00:00:00 nginx: рабочий процесс user1 15503 15462 0 18:00 pts/1 00:00:00 grep --color=auto nginx
Моя конфигурация nginx
сервер {
слушать 80;
#listen [::]:80 ipv6only=on;
имя_сервера your.
server.com;
журнал_доступа /etc/nginx/access.log;
корень /var/www/html/someroot;
расположение / {
#автоиндекс включен;
# Сначала пытаемся обслужить запрос как файл, затем
# в качестве каталога, затем вернуться к отображению 404.
# try_files $uri =404;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header Хост $http_host;
#proxy_set_header X-NginX-Proxy true;
#proxy_pass http://127.0.0.1:8080/;
#proxy_redirect выключен;
#прокси_http_версия 1.1;
#proxy_set_header Обновление $http_upgrade;
#proxy_set_header Соединение "upgrade";
#proxy_redirect выключен;
#proxy_set_header Схема X-Forwarded-Proto $;
#proxy_cache один;
#proxy_cache_key схема sfs$request_uri$;
}
слушать 443 ssl; # под управлением Certbot
ssl_certificate /etc/letsencrypt/live/some/fullchain.
pem;
# под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/some/privkey.pem;
# под управлением Certbot
включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
если ($схема != "https") {
вернуть 301 https://$host$request_uri;
}
}
- nginx
- сервер
- http-status-code-403
- pid
4
Я предлагаю использовать сервер приложений для облегчения связи между Django и Nginx.
Вы можете использовать что-то вроде uWSGI.
Вот ссылка на официальную документацию —
https://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html
Или хотите вариант попроще —
https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-uwsgi-and-nginx-on-ubuntu-14-04
Существуют и другие варианты, например, для пушкикорна —
https://tutos.readthedocs.io/en/latest/source/ndg.
html
1
Во-первых, мне пришлось добавить это в мою конфигурацию Nginx, о чем я узнал из другого вопроса, который я задал.
восходящий сокет {
ip_хеш;
сервер $DAPHNE_IP_ADDRESS$ fail_timeout=0;
}
сервер {
...
расположение / {
прокси_пароль http://сокет;
прокси_http_версия 1.1;
proxy_set_header Обновить $http_upgrade;
proxy_set_header Соединение "обновление";
}
...
}
В этот момент я увидел ошибку 404 . Я решил это, изменив до try_files $uri $uri/ =404; , однако это привело к появлению ошибки 403 Forbidden на всех страницах, кроме домашней. Ключ был в том, чтобы вынуть try_files; в целом и приложение теперь работает отлично.
Я также настроил Supervisord , следуя документации по каналам, для непрерывного запуска Daphne .
попробуйте раскомментировать автоиндекс включен; Директива в блоке местоположения .



key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10 м;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # Загрузить файлы конфигурации для блока сервера по умолчанию.
# include /etc/nginx/default.d/*.conf;
#
# расположение / {
# }
#
# error_page 404 /404.html;
# местоположение = /404.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# местоположение = /50x.html {
# }
# }
9/(config|temp|журналы)/ {
отрицать все;
}
расположение ~/\. {
отрицать все;
доступ_лог выключен;
log_not_found выключен;
}
расположение ~ \.php$ {
включить /etc/nginx/fastcgi_params;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
server.com;
журнал_доступа /etc/nginx/access.log;
корень /var/www/html/someroot;
расположение / {
#автоиндекс включен;
# Сначала пытаемся обслужить запрос как файл, затем
# в качестве каталога, затем вернуться к отображению 404.
# try_files $uri =404;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header Хост $http_host;
#proxy_set_header X-NginX-Proxy true;
#proxy_pass http://127.0.0.1:8080/;
#proxy_redirect выключен;
#прокси_http_версия 1.1;
#proxy_set_header Обновление $http_upgrade;
#proxy_set_header Соединение "upgrade";
#proxy_redirect выключен;
#proxy_set_header Схема X-Forwarded-Proto $;
#proxy_cache один;
#proxy_cache_key схема sfs$request_uri$;
}
слушать 443 ssl; # под управлением Certbot
ssl_certificate /etc/letsencrypt/live/some/fullchain.