Вопрос или проблема
После установки 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.
Шаги по настройке автоматического редиректа
-
Откройте конфигурационный файл Nginx:
Вы можете поделиться текущей конфигурацией, чтобы убедиться, что вы можете внести необходимые изменения. Обычно, конфигурационный файл Nginx находится в
/etc/nginx/sites-available/default
, или путём, специфичным для вашей установки.sudo nano /etc/nginx/sites-available/default
-
Измените раздел
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
, передавая любые параметры запроса. -
Удалите или измените ненужные директивы:
Убедитесь, что нет конфликтующих директив в вашем конфигурационном файле. Ваша текущая конфигурация имеет такие директивы, как
index
, которые могут вести к путанице. В данном случае их не нужно. Убедитесь, чтоroot
установлено один раз для/admin
, как показано выше. -
Проверьте конфигурацию Nginx:
Прежде чем перезапускать Nginx, важно проверить, нет ли ошибок в конфигурации. Выполните следующую команду:
sudo nginx -t
Если все в порядке, вы увидите сообщение о том, что конфигурация работает.
-
Перезапустите Nginx:
После успешной проверки конфигурации, перезапустите Nginx для применения изменений:
sudo systemctl restart nginx
Тестирование
После применения изменений попробуйте снова получить доступ к интерфейсу администратора Pi-Hole через http://pi.hole/admin
. Берите в расчет, что возможно, вам нужно будет очистить кэш браузера или использовать режим инкогнито для исключения влияния кэшированных данных.
Заключение
Следуя вышеописанным шагам, вы сможете настроить автоматический редирект в Nginx, что поможет обойти отсутствующие файлы и устранить ошибки 403 Forbidden. Такая конфигурация позволит корректно перенаправить пользователей на интерфейс администрирования Pi-Hole, избегая при этом ненужных ошибок, связанных с отсутствием файлов. Обязательно следите за логами Nginx, чтобы убедиться, что все работает корректно и вопросы, подобные описанному, не будут возникать в будущем.