ベストプラクティス:server
ハードコードされた個別server_name
nginxのベストプラクティスは、server
このようなリダイレクトに(server
メイン設定のとは共有されません)別のものを使用し、すべてをハードコーディングし、正規表現をまったく使用しないことです。
HTTPSを使用している場合は、提供する証明書を事前に知っておく必要があるため、ドメインをハードコーディングする必要がある場合もあります。
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
server_name www.example.org;
return 301 $scheme://example.org$request_uri;
}
server {
server_name example.com example.org;
# real configuration goes here
}
内での正規表現の使用 server_name
複数のサイトがあり、最も最終的なパフォーマンスは気にしないが、www.
プレフィックスに関してすべてのサイトに同じポリシーを適用したい場合は、正規表現を使用できます。セパレートを使用するベストプラクティスserver
は依然として有効です。
このソリューションを適切に動作させるには、httpsを使用する場合、すべてのドメイン名をカバーする単一の証明書が必要になるため、このソリューションはトリッキーになります。
非www
へwww
のw /専用のシングルでの正規表現server
のすべてのサイトのために:
server {
server_name ~^(?!www\.)(?<domain>.+)$;
return 301 $scheme://www.$domain$request_uri;
}
www
非にwww
専用のシングルでのw /正規表現server
のすべてのサイトのための:
server {
server_name ~^www\.(?<domain>.+)$;
return 301 $scheme://$domain$request_uri;
}
www
非にwww
専用でワット/正規表現server
だけでいくつかのサイトのために:
その後、あなただけ一致させるために、このようなものを使用することができ、カバーにドメインの唯一のカップルを正規表現を制限する必要があるかもしれないwww.example.org
、www.example.com
とwww.subdomain.example.net
。
server {
server_name ~^www\.(?<domain>(?:example\.org|example\.com|subdomain\.example\.net))$;
return 301 $scheme://$domain$request_uri;
}
nginxを使用した正規表現のテスト
正規表現がpcretest
システムで期待どおりに機能することをテストできます。これは、pcre
nginxが正規表現に使用するライブラリとまったく同じです。
% pcretest
PCRE version 8.35 2014-04-04
re> #^www\.(?<domain>(?:example\.org|example\.com|subdomain\.example\.net))$#
data> test
No match
data> www.example.org
0: www.example.org
1: example.org
data> www.test.example.org
No match
data> www.example.com
0: www.example.com
1: example.com
data> www.subdomain.example.net
0: www.subdomain.example.net
1: subdomain.example.net
data> subdomain.example.net
No match
data> www.subdomain.example.net.
No match
data>
「ホスト」ヘッダーに末尾のドットがある場合、nginxサーバー名の正規表現に従って、nginxはすでにそれを処理するため、末尾のドットや大文字小文字を気にする必要がないことに注意してください。
if
既存のserver
/ HTTPS 内に振りかける:
この最終的なソリューションは、一般的にベストプラクティスとは見なされていませんが、それでも機能し、機能します。
実際、HTTPSを使用している場合、異なるserver
定義間で一連のsslディレクティブ全体をコピーして貼り付ける必要がなく、代わりにスニペットのみを配置できるので、この最終的なソリューションは維持しやすくなる可能性があります。必要なサーバー。サイトのデバッグと保守を容易にします。
非www
へwww
:
if ($host ~ ^(?!www\.)(?<domain>.+)$) {
return 301 $scheme://www.$domain$request_uri;
}
www
非www
- へ:
if ($host ~ ^www\.(?<domain>.+)$) {
return 301 $scheme://$domain$request_uri;
}
単一の優先ドメインをハードコーディングする
もう少しパフォーマンスが必要な場合、および単一のドメインserver
が使用する複数のドメイン間の一貫性が必要な場合でも、単一の優先ドメインを明示的にハードコードすることは理にかなっています。
if ($host != "example.com") {
return 301 $scheme://example.com$request_uri;
}
参照:
Dashboard > Settings > General Settings
、を確認www
し、WordPressのアドレス/サイトのアドレスのURL にが含まれていないことを確認してください。nginxの設定方法に関係なく、これらのURLにwwwが含まれている場合、wwwが含まれているURLにリダイレクトされます。