web-dev-qa-db-fra.com

Nginx Wildcard SSL avec Wordpress Sous-domaines multisites

J'ai un certificat générique qui sécurise * .example.com et je dois supprimer le www canonique pour toutes les demandes de sous-domaines, par exemple: www.subdomain1.example.com => subdomain1.example.com

J'ai examiné cette question: https://stackoverflow.com/questions/11323735/nginx-remove-www-and-respond-to-both

Mais le premier bloc serveur qu'ils suggèrent:

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

ne fonctionne pas pour www.subdomain.example.com

Comment attraper et retourner un programme pour www. *. Example.com?

J'ai examiné une autre question: https://serverfault.com/questions/249952/wildcard-vhosts-on-nginx dans laquelle ils utilisent une expression régulière pour correspondre au nom du serveur, mais je ne sais pas comment d'appliquer cela à ma situation.

Voici ma configuration actuelle:

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

Vous pouvez utiliser des expressions régulières dans le server_name directive, mais les noms génériques (par exemple *.example.com) ont priorité. Voir ce document pour plus de détails.

Par exemple:

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;

    ...
}

Le premier bloc server correspond aux demandes http à n'importe quel sous-domaine et redirige vers la variante non www à l'aide de https.

Le deuxième bloc server correspond aux demandes https aux sous-domaines commençant par www. et redirige vers la variante non www.

Le troisième bloc server n'a pas besoin d'un server_name directive (car il s'agit du serveur par défaut) et gère toutes les requêtes https vers le domaine principal et les sous-domaines non www.

0
Richard Smith