Nginx: 将IP地址重定向到域名

使用以下Nginx配置:
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;
}

我试图将http://178.62.136.230/重定向到http://isitmaintained.com/,但是当我部署这个配置后,结果出现了Redirect loop或者这两个链接都无法访问。
我做错了什么?
2个回答

试试这个在第二个区块上:
server {
    listen 80;
    server_name 178.62.136.230;

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

问题在于第二个服务器块的listen指令比第一个服务器块更具体,因此它总是被使用。而且由于第二个块是该listen规范的唯一虚拟主机,所以它总是被使用。
注意:301会添加永久重定向。用302进行测试。

这是有道理的。但是当我应用这个时,我遇到了以下错误:nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32 :( 这不合理,因为我的域名并不那么长。 - Matthieu Napoli
好的,由于某种原因,您的设置要求在nginx中为虚拟主机服务器名称提供更多存储空间,所以您只需增加该设置即可。 - Tero Kilkanen
非常抱歉我没有直接尝试,我确信有什么问题。但是你是对的,重定向现在可以工作了!非常感谢你的帮助 :) - Matthieu Napoli
你是对的,伙计,解决了我的问题,点赞,谢谢。 - amdev

你很接近了。你要找的是重写。
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.
}

5这个“重写”和上面的“返回”做的事情完全一样。 - Tero Kilkanen