nginx 302僅重新導向裸IP

nginx 302僅重新導向裸IP

如果有人輸入 IP 位址,我會嘗試設定 302 重定向,但會將所有其他請求設定為 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,抱歉)能夠將他們的 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並允許該區塊成為“捕獲所有”,同時明確定義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;
}

相關內容