17

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?

Matthieu Napoli
  • 400
  • 1
  • 3
  • 11

2 Answers2

37

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.

John Tribe
  • 103
  • 5
Tero Kilkanen
  • 34,499
  • 3
  • 38
  • 58
  • That makes sense. But when I apply this, I get the following error: `nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32` :( And that doesn't make sense because my domain name is not that long. – Matthieu Napoli Sep 17 '14 at 10:50
  • Well, for some reason your set up requires more storage space for the virtual host server names in nginx, so you should just increase the setting. – Tero Kilkanen Sep 17 '14 at 11:05
  • My apologies for not trying directly, I was sure there was something wrong. But you were right, the redirection works now! A very warm thank you :) – Matthieu Napoli Sep 17 '14 at 11:09
  • you are F***** right man , solved a problem of mine , upvoted , thnx – amdev Feb 15 '19 at 05:33
3

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.
}
ticoombs
  • 148
  • 4