各 nginx 構成は幅広いドメインに対して機能しますが、リクエストを最初のドメイン名 (公式のもの) に自動リダイレクトしたいと考えています。
server {
server_name a.example.com b.example.com;
}
誰かが に入ったらb.example.com/some
、 に直接行きたいa.example.com/some
各 nginx 構成は幅広いドメインに対して機能しますが、リクエストを最初のドメイン名 (公式のもの) に自動リダイレクトしたいと考えています。
server {
server_name a.example.com b.example.com;
}
誰かが に入ったらb.example.com/some
、 に直接行きたいa.example.com/some
これは、 http://wiki.nginx.org/Pitfalls#Server_Nameの良い例とほとんど同じです。つまり、次の 2 つのサーバーを使用する必要があります。
server {
server_name b.example.com;
return 301 $scheme://a.example.com$request_uri;
# For pre-0.8.42 installations:
# rewrite ^ $scheme://a.example.com$request_uri? permanent;
}
server {
server_name a.example.com;
# Do stuff
}
単一のサーバー ブロックでこれを行うには、 if と$server_name
variableを使用できます。
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
の最初の名前であるプライマリ サーバー名を参照し、HTTP 要求で指定されたホスト名を参照します。server_name
$host
if
nginx 構成のステートメントは、常に期待どおりに機能するとは限らないことに注意してください。https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/も参照してください
この回答は、同様のアプローチを使用する別の質問に対するこの回答に触発されました。
Combined version of @kolbyjack and @Matthijs answers with one server
block. This config will redirect all requests with Host
header different from example.com and process only example.com requests.
server {
server_name example.com a.example.com b.example.com;
if ($host != $server_name) {
return 301 $scheme://$server_name$request_uri;
}
# processing requests to $server_name (example.com) only
...
}