HINWEIS: Aktuell ist Pi-Hole nur bedingt mit php8.1 kompatibel! Nutze am besten php7.4, damit keine Probleme entstehen! (20.02.2022)
Pi-Hole installiert (soweit ausgewählt) lighttpd als Webserver auf dem Linux-System. Damit wird ein sauberer Zugriff via Webinterface ermöglicht und die notwendigen Pakete automatisch aktualisiert.
Wer ein anderen Webserver verwenden möchte, z.B. in diesem Fall nginx, muss einige Anpassungen vornehmen, damit Pi-Hole sauber läuft.
Noch kein Pi-Hole installiert?
Ich habe ein Video-Tutorial dazu erstellt. Schau es dir doch einmal an 🙂
Noch kein Pi-Hole installiert, du kennst aber die Anleitung schon?
Sehr gut!
Du kannst während der Installation auswählen, das lighttpd NICHT installiert wird! Somit kannst du dir Schritt 1 sparen!
Das Ziel:
Das Webinterface von Pi-Hole über nginx betreiben.
Die Lösung:
1. Stoppen und deinstallieren von lighttpd
Es ist besser lighttpd direkt komplett zu deinstallieren, damit wir keine Probleme verursachen, wenn zwei Webserver laufen.
apt remove lighttpd* apt purge lighttpd*
2. PHP ggf. updaten / installieren
Installiere nun die aktuellste php-Version.
apt install php7.4 php7.4-fpm php7.4-bcmath php7.4-cgi php7.4-cli php7.4-common php7.4-curl php7.4-gd php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-sqlite3 php7.4-xml php7.4-zip -y
3. Installiere nginx
apt install nginx
4. Eine neue Config für Pi-Hole anlegen
nano /etc/nginx/sites-enabled/pihole
Ich habe hier einmal eine Beispielkonfiguration aufgeführt.
Passe diese einfach auf deine Vorgaben an.
In den meisten Fällen muss nur die PHP-FPM-Version angepasst werden.
Es wird Port 80 verwendet und der Server hat kein Name.
ACHTUNG: Soweit die „default“-Config noch aktiv ist, ändere entweder das Root-Verzeichnis oder den genutzt Port ab. Ansonsten kann es zu Fehler 403 kommen!
server { listen 80; listen [::]:80; root /var/www/html; autoindex off; index pihole/index.php index.php index.html index.htm; location / { expires max; try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param FQDN true; } location /*.js { index pihole/index.js; } location /admin { root /var/www/html; index index.php index.html index.htm; } location ~ /\.ht { deny all; } }
5. Berechtige www-data für die Webinterface-Daten
Das Webinterface wurde mit dem User Root angelegt, soweit du das Script zur Installation ausgeführt hast. Dies müssen wir ändern.
chown -R www-data:www-data /var/www/html/pihole chown -R www-data:www-data /var/www/html/admin
6. Teste die nginx-Konfiguration und starte nginx neu
nginx -t service nginx restart
Das Webinterface sollte nun via nginx zur Verfügung stehen!
Damit nun auch die Steuerung komplett funktioniert, müssen wir noch www-data in die Gruppe pihole stecken. Ansonte lässt sich z.B. nichts importieren.
usermod -aG pihole www-data
Kennst du schon mein öffentliches Pi-Hole?
Damit kannst du von überall in der Welt den Mist blocken lassen!
Schlaues zum Schluss
Du nutzt ein nginx-Proxy und hast diese beiden Fehlermeldung bereits gehabt?
Failed Host Check: [IP-DES-HOSTS] vs 127.0.0.1, , pi.hole, localhost
Failed CORS: [IP-DES-HOSTS] vs 127.0.0.1, , pi.hole, localhost
Gebe als Proxy-IP die reale IP des Servers an und NICHT die Localhost-Adresse. Rufe anschließend das Webinterface mit der IP auf und nicht mit der Domain.
Pingback:Pi-Hole – DNS-over-TLS (DoT) mit nginx - Hoerli.NET
Pingback:Pi-Hole – DNS über HTTPS (DoH) mit nignx - Hoerli.NET
Mit PHP7.4 gab es Probleme: 502 Bad Gateway
/var/nginx/error.log
hatte irgendwelche php access denied meldungenSystem: Armbian 21.08.8 Linux 5.4.160-odroidxu4
(Sorry, ich hasse untermotorisierte Raspi-Dinger 😀 )
Lösung: Abändern von 2 Configs.
Schaut halt mal in dem Pfad
/run/php/
ob da ne datei/symlinkphp-fpm.sock
liegt oder ob das Ding anders heisst.
Das Problem ist dann nämlich NICHT ein Rechteproblen, sondern einfach Griff ins Leere weil siehe unten.
1. Obere Beispielconfig
# fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_pass unix:/run/php/php-fpm.sock;
2. PHP-FPM
(alte Zeile mit ; auskommentiert, damit man sieht was man rumpfuscht)
/etc/php/7.4/fpm/pool.d/www.conf
;listen = /run/php/php7.4-fpm.sock
listen = /var/run/php/php-fpm.sock
Jetzt läuft es, zumindest wenn man via IP-Adresse/admin aufruft.
Nächstes Problem was ich nun fixen muss und wahrscheinlich genauso banal zu lösen ist, das Ansprechen via Host/interne Domain…
Failed Host Check: Rechnername vs 192.168.x.x, , _, pi.hole, localhost
Nachbrenner für Anfänger:
„ACHTUNG: Soweit die “default”-Config noch aktiv ist, ändere entweder das Root-Verzeichnis oder den genutzt Port ab. Ansonsten kann es zu Fehler 403 kommen!“
Ja genau, hilft Anfängern aber nicht wirklich weiter, weil nicht beschrieben WIE!
Wenn man wie oben die config unter pihole speichert statt default
nginx: [emerg] open() "/etc/nginx/sites-enabled/default" failed (2: No such file or directory) in>
Jan 27 18:13:19 Core nginx[8770]: nginx: configuration file /etc/nginx/nginx.conf test failed
Jan 27 18:13:19 Core systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Also Anfänger, legt euch in /etc/nginx/sites-enabled/ nen ordner backup an, sichert/kopiert die Datei default da rein
und erst dann ersetzt den Inhalt von default mit dem oberen Beispiel von Hoerli
Erpart euch viel Frust 😉
Mein Vorgehen soweit war (Frei Schnauze, garantiert politisch-inkorrekt, grammatikalisch ebenso):
Auf die Kiste via ssh als root einloggen und nacheinander abgearbeitet
lighttpd wegbomben und durch nginx ersetzen:
apt purge lighttpd
Gibt am Ende ein WARNING – egal heisst nur das er die Verzeichnisse vom laufendfen Pi-Hole in /var/www/html nicht mit ausradiert wurden, alles gut – Schock bekämpfen und Tasse Kaffee trinken.
apt install -y nginx
Yup, unfallfrei installiert.
Dann mal gucken welche PHP-Version drauf ist, also
php -v
PHP 7.4.25 (cli) (built: Oct 23 2021 21:53:50) ( NTS )
AHA, is also 7.4 – hab ich doch Lunte gerochen das mit copy&paste oben nix draus wird fein,fein
Also die Zeile oben alle 7.3 in 7.4 abändern und mit -y die doofe Frage willste das installieren abwürgen…
apt install -y php7.4 php-fpm php7.4-bcmath php7.4-cgi php7.4-cli php7.4-common php7.4-curl php7.4-gd php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-sqlite3 php7.4-xml php7.4-zip
Dann die Rechte für das html-Verzeichnis setzen, Faulheitshalber als Einzeiler:
chown -R www-data:www-data /var/www/html/pihole && chown -R www-data:www-data /var/www/html/admin
www-data in die pi-hole Gruppe boxen:
usermod -aG pihole www-data
Mal gucken ob nginx was zu meckern hat:
nginx -t
Nö, alles save.
Dann, weil gerade Hirntod-Modus, nochmal wie in der Pi-Hole Doku beschrieben, aber vielleicht fehlt noch das apache zeugs
Doku übrigens völlig outdatet, kümmert sich anscheinend auch keiner drum – wie so oft.
War wahrscheinlich völlig unnötig.
copy&paste aus der Doku:
apt-get -y install nginx php7.4-fpm php7.4-cgi php7.4-xml php7.4-sqlite3 php7.4-intl apache2-utils
Kommentiert mal bitte dazu.
PHP-FPM autostart mal anschmeissen:
systemctl enable php7.4-fpm
yup, hat er angelegt, keine Fehlermeldung
Für nginx auch nochmal den autostart anwerfen:
systemctl enable nginx
Kurz checken ob die Dinger rennen:
systemctl status php7.4-fpm.service
joar, gut – mit q kommt man übrigens wieder raus
systemctl status nginx.service
gleiches spiel, rennt
Weil ich nun mal Faul bin ,Komfort liebe und kein Windoof nutze ausser zum Zocken, mit sftp://rechner via Nautilus verbunden und mit GUI und Texteditor configs bearbeiten ist schon fein.
Egal.
Machen wir den Hollywood-Hackerkonsolenstyle:
nano /etc/nginx/sites-available/default
Ganzen Text löschen und die Config von Hoerli reinkopiert, abspeichern, nginx restart
systemctl restart nginx.service
Dann Fehler 502 – suuuper, war ja klar
Fehlersuche via Schwarmintelligenz Startpage/DuckDuckGo/Google
Viele Beiträge/Foren/Wordpressbeiträge später…
Suche in englisch, denn Hilfe auf deutsch führt meist zu nix Sinvollem, zumindest meist noch unsinniger als englisch.
Lösung irgendwo gefunden wie oben beschrieben.
(Der Threadersteller war akribisch und hat die Lösung selber gepostet, nachdem keiner in der Lage war die Ursache zu finden)
Neuen Tab im Browser, Rechnername wo pi-hole rennt und schwupps blanke Seite mit ner tollen Zeile – nix Interface, verdammt!
Also mal via http://IP-Adresse/admin probiert – tadaaa – funktioniert.
So, hoffe das es euch bisschen weiterhilft, jeze neuen Kaffee und das nächste Problem eruieren…
Hawediehre,
Captain Blackbird
Lösung zum nachgelagerten Problem mit nginx:
Bei „listen“ vor den Port noch die IP-Adresse des Netzwerkadapters eintragen.
Diese Anleitung hat hier geholfen: https://rainbow-six3.com/plesknginx/
server {
listen 192.168.1.1:80;
server_name pihole.domain.de
....
sehr nice wirklich, sehr nice geschrieben und das beste – es funzt sogar 🙂
Vielen Dank für das tolle tutorial hier
besten Gruß
Jörg
Ich bekomme danach die Fehlermeldung:“ Failed Host Check: dns2.domainname.de vs 1**.***.***.22, (ipv6), , pi.hole, localhost“
Alle Domains sind zensiert.
Du greifst in dem Fall via Domain auf den Pi-Hole zu, welche nicht in der Whitelist für den Zugriff steht.
Einfachster Ausweg, nutze die IP-Adresse, welche erlaubt ist 🙂
Umständlicher Ausweg für die Domain: Richte dir ein Proxy-Server ein (geht mit wenigen Zeilen nginx-Code), welcher auf das Webinterface per IP zeigt, dann gehts auch.
Code für Proxy:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name pihole.domain.de;
index index.php;
server_tokens off;
location ^~ / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080/admin/;
proxy_read_timeout 90;
}
ssl_certificate /etc/letsencrypt/live/DEINE-DOMAIN.DE/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/DEINE-DOMAIN.DE/privkey.pem; # managed by Certbot
}
Das editieren der Whitelist funktioniert bei mir auch nicht immer sauber, daher lieber mit Proxy, ist stressfreier.
Einfach nur Klasse! genau was ich brauche – denn ich nutze nginx bereits als proxy.
Jedoch wenn ich „pihole up“ zum aktualisieren ausführe, wird wieder „lighttpd“ installiert. Kann man das umgehen?
Hi!
Super das die Anleitung gefallen hat.
Falls lighttpd wieder kommt, öffne mal die Pi-Hole-Konfiguration (/etc/pihole/setupVars.conf) und ändere deie Parameter INSTALL_WEB_SERVER und LIGHTTPD_ENABLED auf false.
Die müssten bei dir ggf. auf true stehen.
Dann dürfte lighttpd nicht mehr installiert werden