Почему nginx выдает 403 ошибку?

Ссылка скопирована
1 ответ

После настройки локального сервера для разработки на 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"

Спасибо за ответы!

Дополнительно:

зачем вы хостите веб-сервер в личной папке?

  • Ипатьев, ну, у меня цель настроить локальный веб-сервер для работы с php, в личной папке удобнее писать код, вот и все мои аргументы)
  • если вам нужен локальный сервер, то зачем громоздить nginx? Снесите его, запустите php -S dkfire.local:8080 и разрабатывайте себе
    А если хотите этжинкс, то и конфигурируйте его нормально, в том числе и в плане размещения
  • Ипатьев, спасибо вам, наверное это действительно решение)
  • Ответы:

    Ну, вообще ошибка 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, во-первых, я уже написал свой ответ.
      Во-вторых, давая другим советы, желательно думать хотя бы на один ход вперёд.
      Потому что этот ответ направляет в сторону открыть свою домашнюю папку для пользователя ввв-дата. Нужность этой стороны предлагаю оценить самостоятельно ;-)
    • Да, и в-третьих, в чем вообще смысл ответа, который "задает направление"? Особенно если в нем приводится готовый код. В чем смысл писать код, который заведомо не решает проблему, а только "дает направление", причем весьма неочевидное? Ошибка в логе останется ровно та же самая. И тут даже более-менее прошаренный юзер не враз сообразит "направление". Так что это ваше "если не направит" - на самом деле довольно неприятный снобизм
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Максим Павлов Ответ

    Возможно, причина появления ошибки 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, которые могут содержать дополнительную информацию о причинах возникновения ошибки.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно