====== Pi-Hole - Configure Pi-Hole behind NginX ====== **NOTE**: The assumption is that **NginX** is installed onto same device on which Pi-Hole will be installed. Pi-hole by default installs **lighttpd** as its web-server. This **lighttpd** server usually handles and web traffic to Port 80, and the admin dashboard for pi-hole can be accessed using the IP of the device it is installed on, such as http://192.168.1.25/admin/. But with **NginX** installed onto this device, means that it is actually NginX that would process any web traffic to Port 80; and therefore this would result in a conflict in that lighttpd would not be able to process Port 80 as well. The solution is to keep lighttpd running on an alternate port (such as 81) and let NginX proxy all requests to pi-hole to that port. ---- ===== Change the server port for lighttpd ===== ... server.port = 81 ... ---- ===== Restart lighttpd ===== sudo systemctl restart lighttpd.service Check lighttpd is running sudo systemctl status lighttpd.service ---- ===== Edit NginX Configuration ===== server { listen 80; listen [::]:80; server_name pi.hole; return https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name pi.hole; ssl_certificate 'ssl/pi.hole.crt'; ssl_certificate_key 'ssl/pi.hole.key'; location / { proxy_pass http://localhost:81; include proxy.conf; } # let's go directly to the login page location = / { return $scheme://$host/admin/index.php?login; } } The **proxy.conf** file: proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; ---- ===== Restart NginX ===== sudo systemctl restart nginx.service Check NginX is running sudo systemctl status nginx.service ---- ====== Usage ====== Whenever someone visits **https://pi.hole**, it redirects to **https://pi.hole/admin/index.php?login** which is the login page for pi-hole admin dashboard. ---- ===== References ===== https://www.tinywp.com/pi-hole/