web-dev-qa-db-ja.com

すべての要求をドメインエイリアスからメインドメインにリダイレクトするようにnginxを構成するにはどうすればよいですか?

複数のドメインに応答するnginxサーバーがあり、すべてのリクエストをメインドメインにリダイレクトしたいのですが。

例:httphttpsの両方に対してxxx xxx.example.com yyy.example.com $hostnameで応答するWebサイト。

他のドメイン名へのすべての要求がxxx.example.comにリダイレクトされるようにサーバーを構成したいと思います。

5
sorin

私はこれらの線に沿った何かがうまくいくはずだと思います:

set $primary_domain "xxx.example.com";
if ($Host != $primary_domain) {
    rewrite ^ $scheme://$primary_domain permanent;
}
1
Brenton Alker

これを行うための最も効率的でクリーンな方法は、2つの個別のサーバー{}ブロックを構成することです。

設定例:

server {
    listen 80;
    listen 443 ssl;

    server_name xxx yyy.example.com $hostname;

    ssl_certificate ...
    ssl_certificate_key ...

    return 302 $scheme://xxx.example.com$request_uri;
}

server {
    listen 80;
    listen 443 ssl;

    server_name xxx.example.com;

    ssl_certificate ...
    ssl_certificate_key ...

    ...
}

ドキュメンテーション:

22
Maxim Dounin

以下は、Brenton Alkerのanserのバリアントです。 $server_name variable を使用して、server_nameディレクティブの値を再利用しています。

    server_name primary.tld secondary.tld;
    if ($Host != $server_name) {
        rewrite ^ $scheme://$server_name permanent;
    }

または、クエリパラメータを保持するには:

    server_name primary.tld secondary.tld;
    if ($Host != $server_name) {
        rewrite ^/(.*) $scheme://$server_name/$1 permanent;
    }

ここで、 $server_nameserver_nameディレクティブの最初の名前であるプライマリサーバー名を参照し、 $Host はHTTPリクエストで指定されたホスト名。

Nginx構成のifステートメントは常に期待どおりの動作をするわけではなく、一部のユーザーはその使用を推奨しないことに注意してください。参照 https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

1