Playing around with technology

whoami with nginx

Out of the cookbook of services that you need from time to time there is another service which I decided to host myself: whoami. While “whoami” is a rather broadly used term with different meanings in this particular case it means: “what is my external IP address?”.

One way to find out is to use a service that returns your external IP address as a text string. Luckily this can be easily implemented in nginx. The configuration is rather simple:

server {
    listen          [::]:443 ssl http2;
    listen          443 ssl http2;
    server_name     whoami.mydomain.tld;
    default_type    text/plain;
    return          200 "$remote_addr\n";

    ssl_certificate […]/fullchain.pem;
    ssl_certificate_key […]/privkey.pem;

The most important lines are 5 and 6. These tell nginx to return1 a text string with the remote address (external IP) of the visitor. The \n after $remote_addr adds a end-of-line character to prevent issues with programs not recognizing the end of file otherwise. All other lines are commonly used nginx settings in order to use SSL, http2 etc. Further information on these commands is available from the nginx documentation.

So how do I get my IP address once everything is running? For instance you could use curl to get your IPv4 (using the -4 flag) or IPv6 (using the -6 flag) address:

curl -6 https://whoami.mydomain.tld

  1. We make use of the nginx return function which is shipped with the http_rewrite_module module. As long as you have not explicitly disabled building the module it should be available in your installation. ↩︎

Article info