Настройте автоматический редирект в nginx для обхода отсутствующего файла.

Вопрос или проблема

После установки Pi-Hole на существующей системе с nginx и Baïkal (сервер CalDAV) я не могу заставить работать интерфейс администратора Pi-Hole, всегда возникает ошибка 403 Forbidden. В остальном Pi-Hole работает хорошо. Я не устанавливал lighttpd вместе с Pi-Hole, предпочитая nginx.

Используя strace, я выяснил, что nginx не справляется после поиска нескольких отсутствующих файлов. Файлы должны находиться в /var/www/html/admin/: index.html, index.htm и index.nginx-debian.html. Единственный похожий файл, который у меня есть, это index.php.

Эта страница https://discourse.pi-hole.net/t/yesterdays-update-removed-the-index-html/60531/2 говорит, что index.html был намеренно удален и: “Вы должны иметь автоматическое перенаправление, когда обращаетесь к веб-интерфейсу через pi.hole.”

Я не могу найти ничего полезного для этой проблемы. Как мне настроить автоматическое перенаправление в nginx?

Вот мой файл конфигурации nginx, взятый из https://docs.pi-hole.net/guides/webserver/nginx/ :

server {
    listen 80;
    root /var/www/html;
    server_name $hostname;
    autoindex on;
    error_log /var/log/nginx/debug.log debug;
    index pihole/index.php index.php index.html index.htm;
    location / {
        expires max;
        try_files $uri $uri/ =404;
    }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param FQDN true;
#        auth_basic "Restricted"; # Для основной аутентификации
#        auth_basic_user_file /etc/ssl/.htpasswd; # Для основной аутентификации, так же как и Baikal
    }

    location /*.js {
        index pihole/index.js;
#        auth_basic "Restricted"; # Для основной аутентификации
#        auth_basic_user_file /etc/ssl/.htpasswd; # Для основной аутентификации, так же как и Baikal
    }

    location /admin {
# Пытаемся запустить админку, пробуем перенаправление
        rewrite ^/index.htm$ /index.php permanent ;
        root /var/www/html;
        index index.php index.html index.htm;
#     index index.php;
#     auth_basic "Restricted"; # Для основной аутентификации
#     auth_basic_user_file /etc/ssl/.htpasswd; # Для основной аутентификации, так же как и Baikal
    }
    location ~ /\.ht {
        deny all;
    }
} 

Что я пробовал

• autoindex off или on 
• Изменение директивы index на только index.php
• auth_basic активен и удален
• Добавление оператора переписывания

Ничто из этого не оказало никакого эффекта.

Одной из сложностей является то, что как Pi-Hole, так и Baïkal имеют клиента под названием ‘admin’. Я установил для обоих одинаковые пароли, затем удалил пароль Pi-Hole и в конце концов убрал аутентификацию (в Pi-Hole), но это не дало успеха.

Конфликтов между Pi-Hole и Baïkal быть не должно. Baïkal слушает порт 9999, а Pi-Hole использует 80.

Детали системы

Raspberry Pi 3B с Pi OS bookworm, nginx и Baïkal, все новые версии. Linux Mint на десктопе с Firefox.

Ответ или решение

Для настройки автоматического редиректа в Nginx с целью обхода отсутствующих файлов, вам потребуется внести некоторые изменения в конфигурационный файл вашего веб-сервера. Данная проблема возникает из-за того, что Nginx не может найти файлы index.html, index.htm и index.nginx-debian.html, которые по умолчанию ожидаются для работы интерфейса Pi-Hole.

Шаги по настройке автоматического редиректа

  1. Откройте конфигурационный файл Nginx:

    Вы можете поделиться текущей конфигурацией, чтобы убедиться, что вы можете внести необходимые изменения. Обычно, конфигурационный файл Nginx находится в /etc/nginx/sites-available/default, или путём, специфичным для вашей установки.

    sudo nano /etc/nginx/sites-available/default
  2. Измените раздел location /admin:

    Добавьте редирект, который будет перенаправлять пользователей, пытающихся получить доступ к /admin, на файл index.php, который у вас уже есть. Вы можете использовать директиву try_files, чтобы осуществить проверку наличия необходимых файлов, а затем редиректить пользователей на index.php, если файлы отсутствуют.

    Измените секцию location /admin следующим образом:

    location /admin {
       # Попытка загрузить index.php, если не найден
       try_files $uri /pihole/index.php?$query_string;
    }

    В этом коде try_files проверяет наличие файла $uri. Если файл не найден, запрос перенаправляется на index.php, передавая любые параметры запроса.

  3. Удалите или измените ненужные директивы:

    Убедитесь, что нет конфликтующих директив в вашем конфигурационном файле. Ваша текущая конфигурация имеет такие директивы, как index, которые могут вести к путанице. В данном случае их не нужно. Убедитесь, что root установлено один раз для /admin, как показано выше.

  4. Проверьте конфигурацию Nginx:

    Прежде чем перезапускать Nginx, важно проверить, нет ли ошибок в конфигурации. Выполните следующую команду:

    sudo nginx -t

    Если все в порядке, вы увидите сообщение о том, что конфигурация работает.

  5. Перезапустите Nginx:

    После успешной проверки конфигурации, перезапустите Nginx для применения изменений:

    sudo systemctl restart nginx

Тестирование

После применения изменений попробуйте снова получить доступ к интерфейсу администратора Pi-Hole через http://pi.hole/admin. Берите в расчет, что возможно, вам нужно будет очистить кэш браузера или использовать режим инкогнито для исключения влияния кэшированных данных.

Заключение

Следуя вышеописанным шагам, вы сможете настроить автоматический редирект в Nginx, что поможет обойти отсутствующие файлы и устранить ошибки 403 Forbidden. Такая конфигурация позволит корректно перенаправить пользователей на интерфейс администрирования Pi-Hole, избегая при этом ненужных ошибок, связанных с отсутствием файлов. Обязательно следите за логами Nginx, чтобы убедиться, что все работает корректно и вопросы, подобные описанному, не будут возникать в будущем.

Оцените материал
Добавить комментарий

Капча загружается...