Running a modern webserver

At dotGo 2015 I realized I had to regain an online presence. I had to build a site again, on which I could post an occasional blog-post.

I’m not good at building sites, graphically, so bear with me on that point. This site might look ugly for a while.

The reason I’m building a site/blog again is because I’m using some interesting tech. For this webserver for example. It’s using a secure connection, with a certificate that was automatically authorized. And because of this TLS connection it can run HTTP/2. How?


Enter Caddy. A brand-new webserver built for ease of use. It features HTTP/2 from the start, which is awesome.

Compared to the most commonly used webserver, the configuration is very simple. This site is built using Hugo, which makes it a static site, and the configuration needed to expose this site using Caddy is simple: {
   root /home/luit/web/

If I want more, I can use the hugo plugin to automatically rebuild the site. Or I can use the git plugin to automatically fetch the site data from a git repository.

So that’s a good start, but it’s not using HTTP/2 in this configuration. To get HTTP/2 you’ll need HTTPS first. I recently gained access to the limited beta of Let’s Encrypt, making this very easy.

Let’s Encrypt

Using the latest beta build of Caddy I tried using the built-in support for Let’s Encrypt. To enable this for this site, I changed my config to become the following: {
    root /home/luit/web/

If you can’t spot what I added to the config you’re looking for the wrong thing; I actually had to REMOVE something to enable a feature! Remove the http:// and Caddy defaults to serving http and https on the default ports for you. Requiring a certificate it’ll then automatically request one at Let’s Encrypt, complete the challenge required by it, and start using it seconds later.

So now I have a blog that’s accessable over IPv6 through HTTP/2, secured automatically using Let’s Encrypt. It might not look fancy (yet?), but behind the scenes it’s quite awesome.