web-dev-qa-db-ja.com

Nginx Wildcard SSL with Wordpress Multisite Subdomains

* .example.comを保護するワイルドカード証明書があり、サブドメインに対して行われたすべてのリクエストに対して正規のwwwを取り除く必要があります。例:www.subdomain1.example.com => subdomain1.example.com

私はこの質問をレビューしました: https://stackoverflow.com/questions/11323735/nginx-remove-www-and-respond-to-both

しかし、彼らが提案する最初のサーバーブロック:

server {
  server_name www.example.com;
  return 301 $scheme://example.com$request_uri;
}

www.subdomain.example.comでは機能しません

Www。*。example.comのスキームをキャッチして返すにはどうすればよいですか?

私は別の質問を検討しました: https://serverfault.com/questions/249952/wildcard-vhosts-on-nginx 正規表現を使用してサーバー名を照合しますが、方法がわかりませんこれを私の状況に適用します。

これが私の現在の設定です:

server {
    listen [::]:80 ipv6only=off;
    server_name example.com *.example.com;
    return 301 https://$Host$request_uri;
}

server {

    # SSL configuration

    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;
    server_name example.com *.example.com;

    root /usr/share/nginx/webroot;
    index index.php index.html index.htm;

    rewrite /wp-admin$ $scheme://$Host$uri/ permanent;

    #subdomain multi site with wp in 'wp' subdir
    if (!-e $request_filename) {
    # Redirect wp-* files/folders
    rewrite ^(/[^/]+)?(/wp-.*) /wp/$2 last;

    # Redirect other php files
    rewrite ^(/[^/]+)?(/.*\.php) /wp/$2 last;
    }

    ...(etc)
}
1
Elkrat

server_nameディレクティブでは正規表現を使用できますが、ワイルドカード名(*.example.comなど)が優先されます。詳細は このドキュメント を参照してください。

例えば:

server {
    listen [::]:80 ipv6only=off;
    server_name ~^(www\.)?(?<name>(.+\.)?example\.com)$;
    return 301 https://$name$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;

    server_name ~^www\.(?<name>(.+\.)?example\.com)$;
    return 301 https://$name$request_uri;
}

server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    include snippets/ssl-example.com.conf;
    include snippets/ssl-params.conf;

    ...
}

最初のserverブロックはhttpリクエストを任意のサブドメインに照合し、httpsを使用してwww以外のバリアントにリダイレクトします。

2番目のserverブロックは、httpsリクエストをwww.で始まるサブドメインに一致させ、www以外のバリアントにリダイレクトします。

3番目のserverブロックはserver_nameディレクティブを必要とせず(デフォルトのサーバーであるため)、メインドメインと非wwwサブドメインへのすべてのhttpsリクエストを処理します。

0
Richard Smith