Почему nginx выдает 403 ошибку?
После настройки локального сервера для разработки на php, nginx вроде как смотрит в нужную директорию по нужному порту, но не имеет прав на работу с файлами, как я понял.
Мой dkfire.local
server { listen 80; server_name dkfire.local; root /home/dkfire/code/php/dkfire; index index.php index.html; location ~* .(jpg|jpeg|gif|css|png|js|ico|html)$ { access_log off; expires max; log_not_found off; } location / { try_files $uri $uri/ /index.php?$query_string; } location ~* .php$ { try_files $uri = 404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /.ht { deny all; } } |
server { listen 80; server_name dkfire.local; root /home/dkfire/code/php/dkfire; index index.php index.html; location ~* .(jpg|jpeg|gif|css|png|js|ico|html)$ { access_log off; expires max; log_not_found off; } location / { try_files $uri $uri/ /index.php?$query_string; } location ~* .php$ { try_files $uri = 404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /.ht { deny all; } }
Логи nginx:
2024/03/10 14:32:25 [crit] 7708#7708: *1 stat() "/home/dkfire/code/php/dkfire/" failed (13: Permission denied), client: 127.0.0.1, server: dkfire.local, request: "GET / HTTP/1.1", host: "dkfire.local" 2024/03/10 14:32:25 [crit] 7708#7708: *1 stat() "/home/dkfire/code/php/dkfire/index.php" failed (13: Permission denied), client: 127.0.0.1, server: dkfire.local, request: "GET / HTTP/1.1", host: "dkfire.local" 2024/03/10 14:32:25 [crit] 7708#7708: *1 stat() "/home/dkfire/code/php/dkfire=" failed (13: Permission denied), client: 127.0.0.1, server: dkfire.local, request: "GET / HTTP/1.1", host: "dkfire.local" 2024/03/10 14:32:25 [error] 7708#7708: *1 open() "/home/dkfire/code/php/dkfire404" failed (13: Permission denied), client: 127.0.0.1, server: dkfire.local, request: "GET / HTTP/1.1", host: "dkfire.local" |
2024/03/10 14:32:25 [crit] 7708#7708: *1 stat() "/home/dkfire/code/php/dkfire/" failed (13: Permission denied), client: 127.0.0.1, server: dkfire.local, request: "GET / HTTP/1.1", host: "dkfire.local" 2024/03/10 14:32:25 [crit] 7708#7708: *1 stat() "/home/dkfire/code/php/dkfire/index.php" failed (13: Permission denied), client: 127.0.0.1, server: dkfire.local, request: "GET / HTTP/1.1", host: "dkfire.local" 2024/03/10 14:32:25 [crit] 7708#7708: *1 stat() "/home/dkfire/code/php/dkfire=" failed (13: Permission denied), client: 127.0.0.1, server: dkfire.local, request: "GET / HTTP/1.1", host: "dkfire.local" 2024/03/10 14:32:25 [error] 7708#7708: *1 open() "/home/dkfire/code/php/dkfire404" failed (13: Permission denied), client: 127.0.0.1, server: dkfire.local, request: "GET / HTTP/1.1", host: "dkfire.local"
Спасибо за ответы!
Дополнительно:
зачем вы хостите веб-сервер в личной папке?
А если хотите этжинкс, то и конфигурируйте его нормально, в том числе и в плане размещения
Ответы:
Ну, вообще ошибка 403 - это явно то что Nginx не имеет прав на доступ к файлам или директориям, которые пытается открыть.
Попробуйте еще раз изменить владельца и права такой командой:
sudo chown -R www-data:имя_пользователя /home/dkfire/code/php/dkfire sudo chmod -R 755 /home/dkfire/code/php/dkfire |
sudo chown -R www-data:имя_пользователя /home/dkfire/code/php/dkfire sudo chmod -R 755 /home/dkfire/code/php/dkfire
Попробуйте, ошибка 403 должна исчезнуть.
- Вы не понимаете, как работает система разрешений в юникс.
Чтобы прочитать файлы из папки /home/dkfire/code/php/dkfire, сначала надо попасть в папку /home/dkfire/code/php. Куда вас никто, разумеется, не пустит.
И как следствие, ошибка вам ничего не будет должнаky0 вас это тоже касается.
- Ипатьев, а мужики-то не в курсе (с)
Ответ действительно неполон - но он скорее всего верно демонстрирует причину проблем ТСа. Долго рассусоливать в этом случае, имхо, не стоит - если такой ответ не направит в нужную сторону, значит ССЗБ.
Если вас это сильно беспокоит, напишите свой, более полный ответ - я с удовольствием отмечу его как решение.
- ky0, во-первых, я уже написал свой ответ.
Во-вторых, давая другим советы, желательно думать хотя бы на один ход вперёд.
Потому что этот ответ направляет в сторону открыть свою домашнюю папку для пользователя ввв-дата. Нужность этой стороны предлагаю оценить самостоятельно ;-) - Да, и в-третьих, в чем вообще смысл ответа, который "задает направление"? Особенно если в нем приводится готовый код. В чем смысл писать код, который заведомо не решает проблему, а только "дает направление", причем весьма неочевидное? Ошибка в логе останется ровно та же самая. И тут даже более-менее прошаренный юзер не враз сообразит "направление". Так что это ваше "если не направит" - на самом деле довольно неприятный снобизм
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Возможно, причина появления ошибки 403 Forbidden в Nginx может быть связана с различными факторами. Вот несколько возможных причин и способы их решения:
1. Неправильные права доступа к файлам или каталогам:
Проверьте права доступа к файлам и каталогам, к которым обращается Nginx. Убедитесь, что пользователь, от имени которого работает Nginx, имеет право на чтение этих файлов.
2. Неправильная конфигурация:
Проверьте конфигурационные файлы Nginx на наличие ошибок или опечаток. Убедитесь, что пути к файлам и каталогам указаны верно.
3. Ограничения доступа:
Проверьте конфигурационные файлы Nginx на наличие директив, которые могут ограничивать доступ к определенным URL или IP адресам. Убедитесь, что правила доступа настроены правильно.
4. Проблемы с SELinux или AppArmor:
Если на сервере включен SELinux или AppArmor, убедитесь, что они не блокируют доступ к файлам или каталогам, к которым обращается Nginx.
5. Проблемы с индексными файлами:
Убедитесь, что в каталогах, к которым обращается Nginx, присутствует индексный файл (например, index.html или index.php). В противном случае Nginx может вернуть ошибку 403.
6. Перезапуск Nginx:
Если после внесения изменений в конфигурацию Nginx ошибка 403 все еще возникает, попробуйте перезапустить сервис Nginx, чтобы применить изменения.
Для более подробной диагностики ошибки 403 в Nginx, рекомендуется просмотреть логи доступа и ошибок Nginx, которые могут содержать дополнительную информацию о причинах возникновения ошибки.