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)
}
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.