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
.
попробуйте раскомментировать автоиндекс включен; Директива
в блоке местоположения
.