Nginx: Redirect IP address to domain name

With the following Nginx config:

server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;

    server_name isitmaintained.com;

    ...
}

server {
    listen 178.62.136.230:80;
    server_name 178.62.136.230;

    add_header X-Frame-Options "SAMEORIGIN";

    return 301 $scheme://isitmaintained.com$request_uri;
}

I am trying to redirect http://178.62.136.230/ to http://isitmaintained.com/ but when I deploy this config I end up with a Redirect loop or both of those links.

What am I doing wrong?


Solution 1:

Try this on the second block:

server {
    listen 80;
    server_name 178.62.136.230;

    return 302 $scheme://google.com$request_uri;
}

The problem is that the second server block listen directive is more specific than first server block, therefore it is always used. And since the second block is the only virtual host for that listen specification, it is always used.

Note : 301 will add permanent redirect. Use 302 for testing.

Solution 2:

You were close. Its rewrite that you are looking for.

server {
    listen 178.62.136.230:80;
    server_name 178.62.136.230 isitmaintained.com;

    rewrite  ^/(.*)$  http://www.isitmaintained.com/$1 permanent;
}
server {
    listen 80;
    server_name www.isitmaintained.com;
    # Serve Stuff Here.
}