Configuring nginx to handle www redirects on Tinker Log


Messing with nginx configuration always gives me a hint of anxiety. The config file looks like a C-based language. It has curly braces and semicolons. It has if statements.

But nginx config files aren’t C-based. Properties aren’t assigned by equal signs: they’re assigned by putting the property name followed by the value you want to set. There are global magic variables that are prefixed with a $ like it’s PHP.

It’s unnerving. Be a general purpose programming language or be nothing.

Regardless of my feelings, Google Search Console was picking up the www variation of the site so this was a problem I needed to fix.

I tried to simplify my nginx config as much as possible so I’d have less opportunities to confuse myself later or break something. Here’s what I came up with:

server {
    server_name tinkerlog.dev www.tinkerlog.dev;

    listen [::]:443 ssl ipv6only=on;
    listen 443 ssl;

    location / {
        proxy_pass http://localhost:3000;
    }

    if ($host = www.tinkerlog.dev) {
        return 301 https://tinkerlog.dev$request_uri;
    }

    # Certbot stuff here...
}

server {
    server_name tinkerlog.dev www.tinkerlog.dev;

    listen 80;
    listen [::]:80;

    return 301 https://tinkerlog.dev$request_uri;
}

Cheers.