nginx 302 仅重定向裸 IP

nginx 302 仅重定向裸 IP

如果有人输入 IP 地址,我会尝试设置 302 重定向,但其他所有请求都会转到该域的 www.subdomain。

server {
    listen 198.251.86.133:80;
    server_name 198.251.86.133;
    return 302 http://www.jacobdevans.com/anycast-301/;
}

server {
    listen 198.251.86.133:80;
    server_name _;
    return 301 http://www.$host$request_uri;
}

我已经可以使用 301 了,除非我把上面的 302 部分放进去,我希望允许任何人(非 https,抱歉)能够将他们的 A 记录根域指向某个容易执行 301 的地方,从 example.com 到 www.example.com

目前,所有内容都可以通过第一个收听选项捕获

# curl -I jacobdevans.com
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.6.3
Date: Mon, 28 Sep 2015 20:08:45 GMT
Content-Type: text/html
Content-Length: 160
Connection: keep-alive
Location: http://www.jacobdevans.com/anycast-301/

# curl -I 198.251.86.133
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.6.3
Date: Mon, 28 Sep 2015 20:08:56 GMT
Content-Type: text/html
Content-Length: 160
Connection: keep-alive
Location: http://www.jacobdevans.com/anycast-301/

http://www.redirect-checker.org将从我的卢森堡位置提取

谢谢!

答案1

您需要有一个服务器块,因为当它们匹配相同的监听指令时,两者都不会被读取。

您应该能够按如下方式修改块以实现所需的结果:

server {
   listen 80;
   server_name 198.251.86.133;
   return 302 http://www.jacobdevans.com/anycast-301/;
}

server {
   listen 80 default_server;
   return 302 http://www.$host$request_uri;
}

设置 default_server 并允许该块为“catch all”,同时明确定义 IP 以匹配传入的 HOST 标头,将导致所有针对直接 IP 的请求被重定向到,http://www.jacobdevans.com/anycast-301/其余请求被重定向到http://www.$host$request_uri

答案2

将其放在引号中,现在它就符合预期了。

server {
    listen 198.251.86.133:80;
    server_name "198.251.86.133";
    return 302 http://www.jacobdevans.com/anycast-301/;
}

server {
    listen 198.251.86.133:80 default_server;
    server_name _;
    return 301 http://www.$host$request_uri;
}

相关内容