Caddy Webserver Frontend

Dan Schaper edited this page Oct 30, 2016 · 1 revision

If you'd like to use Caddy as your main web server with PiHole, you'll need to make a few changes.

Modifying lighttpd configuration

First, change the listen port in /etc/lighttpd/lighttpd.conf:

server.port                 = 1080

In this case I chose 1080 somewhat at random. Use whatever feels right to you.

Next, restart the lighttpd server with sudo systemctl restart lighttpd or sudo service lighttpd restart.

Setting up your Caddyfile

Now we need to set up a "virtual host" in our Caddyfile (default /etc/caddy/Caddyfile). There are many more options you can add, but at bare minimum you need to make a "default" host by binding 0.0.0.0:80 which will accept requests for any host.

blackhole:80, pi.hole:80, 0.0.0.0:80 {
  root /var/www/html/pihole
  log /var/log/caddy/blackhole.log

  rewrite {
    ext js
    to index.js
  }

  proxy / localhost:1080 {
    transparent
  }
}

In this case I've chosen to also add blackhole and pi.hole as valid names to open the admin page with.

Finally, restart your Caddy server: sudo service caddy restart

Verifying your set up

First, make sure that any other sites you're serving from caddy are still functioning. For example, if you have a block for myawesomesite.com:80 in your Caddyfile, open up a browser to http://myawesomesite.com and verify it still loads.

Next, verify you can load the admin page. Open up http://pi.hole/admin (or use the IP address of your server) and verify that you can access the admin page.

Finally, verify that requests for ads are being black holed:

$ curl -H "Host: badhost" pi.hole/
<html>
<head>
<script>window.close();</script>
</head>
<body>
</body>
</html>

Replace pi.hole with the IP address or alternate DNS name you're using if necessary.

Lastly, ensure that requests for JavaScript files from advertisement domains are being served properly:

curl -H "Host: badhost" pi.hole/malicious.js
var x = "Pi-hole: A black hole for Internet advertisements."
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.