複数のドメインに応答するnginxサーバーがあり、すべてのリクエストをメインドメインにリダイレクトしたいのですが。
例:http
とhttps
の両方に対してxxx xxx.example.com yyy.example.com $hostname
で応答するWebサイト。
他のドメイン名へのすべての要求がxxx.example.com
にリダイレクトされるようにサーバーを構成したいと思います。
私はこれらの線に沿った何かがうまくいくはずだと思います:
set $primary_domain "xxx.example.com";
if ($Host != $primary_domain) {
rewrite ^ $scheme://$primary_domain permanent;
}
これを行うための最も効率的でクリーンな方法は、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 ...
...
}
ドキュメンテーション:
以下は、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_name
はserver_name
ディレクティブの最初の名前であるプライマリサーバー名を参照し、 $Host
はHTTPリクエストで指定されたホスト名。
Nginx構成のif
ステートメントは常に期待どおりの動作をするわけではなく、一部のユーザーはその使用を推奨しないことに注意してください。参照 https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/