web-dev-qa-db-ja.com

nginx:default_server上の非www、SSL URLへの301リダイレクト

私の目標は、http://で始まるか、または//www.を含むすべての要求されたURLのチェックを主にnginxに返させ、//www.//で置き換えられ、http://https://で置き換えられたURLに301をリダイレクトすることです.

要するに、必要に応じて、すべてのリクエストが非www、SSLバージョンにリダイレクトされるため、その後、特定のドメインのリバースプロキシとして機能する他のすべてのデフォルト以外のサーバーは、常にhttps、非wwwを取得しますリクエスト。

どうすればいいですか?

2
Marko36

httpサーバーは特定の証明書を必要としないため、単一のhttpsブロックですべてのドメインをserver non-wwwにリダイレクトできます。

例えば:

server {
    listen 80;
    server_name ~^(www\.)?(?<domain>.+)$;
    return 301 https://$domain$request_uri;
}

詳しくは このドキュメント をご覧ください。


httpsサーバーは、おそらく各ドメインに特定の証明書を必要とします。 wwwからwww以外にリダイレクトするには、特定の証明書が両方の名前バリアントに対して有効である必要があります。リダイレクトを実行するには、特定のドメインごとに2つのserverブロックを使用する必要があります。既存のブロックと別のブロックです。

例えば:

server {
    listen 443 ssl;
    server_name www.example.com;

    ssl_certificate     /path/to/example.com.crt;
    ssl_certificate_key /path/to/example.com.key;

    return 301 https://example.com$request_uri;
}
server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate     /path/to/example.com.crt;
    ssl_certificate_key /path/to/example.com.key;

    ... this is the existing server block for this domain ...
}

詳しくは このドキュメント をご覧ください。

3
Richard Smith