nginx 302只redirect裸IP

我试图设置一个302redirect,如果有人inputIP地址,但301所有其他请求到该域的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,抱歉)能够指向他们的Alogging根域某处容易做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将从我的卢森堡位置拉

谢谢!

您将需要有一个单一的服务器块,因为它们将不会被阅读,当他们匹配相同的侦听指令。

您应该可以按如下方式修改块,以达到您想要的效果:

 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并允许该块为“全部捕获”,同时显式定义IP以匹配传入的HOST头部,将导致直接IP的所有请求被redirect到http://www.jacobdevans.com/anycast-301/和其余的http://www.$host$request_uri

把它放在引号中,现在如预期的那样。

 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; }