web-dev-qa-db-ja.com

nginx302はネイキッド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で簡単に実行できる場所にポイントできるようにすることを望んでいます。 .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
Jacob Evans

引用符で囲んでください。今では期待どおりです。

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;
}
0
Jacob Evans

同じlistenディレクティブに一致している間は両方が読み取られないため、単一のサーバーブロックが必要になります。

目的の結果を達成するには、次のようにブロックを変更できるはずです。

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」にすると同時に、着信Hostヘッダーと一致するようにIPを明示的に定義すると、直接IPに対するすべての要求がhttp://www.jacobdevans.com/anycast-301/にリダイレクトされ、残りはhttp://www.$Host$request_uriにリダイレクトされます。

0
Linztm