Nginx:IPアドレスをドメイン名にリダイレクト


12

次の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://isitmaintained.com/にリダイレクトしようとしhttp://178.62.136.230/ていますが、この構成を展開すると、Redirect loopこれらのリンクのいずれかまたは両方が発生します。

私は何を間違えていますか?

回答:


30

2番目のブロックでこれを試してください。

server {
    listen 80;
    server_name 178.62.136.230;

    return 301 $scheme://isitmaintained.com$request_uri;
}

問題は、2番目のサーバーブロックlistenディレクティブが最初のサーバーブロックよりも具体的であるため、常に使用されることです。また、2番目のブロックはそのlisten仕様の唯一の仮想ホストであるため、常に使用されます。


それは理にかなっている。しかし、これを適用すると、次のエラーが表示されます。nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32:(そして、ドメイン名がそれほど長くないため、意味がありません。
Matthieu Napoli 14

まあ、なんらかの理由で、セットアップではnginxの仮想ホストサーバー名のためにより多くのストレージスペースが必要になるため、設定を増やす必要があります。
テロキルカネン14

直接試していないことをおologiesびします。何か間違いがあると確信しました。しかし、あなたは正しかった、リダイレクトは今すぐ動作します!非常に暖かいありがとう:)
マチューナポリ14

あなたはF *****正しい人であり、私の問題を解決し、賛成し、thnx
a_m_dev

3

あなたは近くにいました。あなたが探しているその書き換え。

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
これrewritereturn上記はまったく同じことを行います。
テロキルカネン14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.