J'ai une certification SSL générique et j'essaie de rediriger tout le trafic non SSL vers SSL. Actuellement, j'utilise ce qui suit pour rediriger l'URL non sous-domaine qui fonctionne bien.
server {
listen 80;
server_name mydomain.com;
#Rewrite all nonssl requests to ssl.
rewrite ^ https://$server_name$request_uri? permanent;
}
quand je fais la même chose pour * .mydomain.com, il redirige logiquement vers
https://%2A.mydomain.com/
Comment redirigez-vous tous les sous-domaines vers leur équivalent https?
C'est tout...
server {
listen 80;
server_name *.mydomain.com;
#Rewrite all nonssl requests to ssl.
return 301 https://$Host$request_uri;
}
La documentation officielle de NGINX encourage à utiliser la directive return au lieu d'utiliser la directive rewrite pour effectuer la redirection. Il en est ainsi, car la demande en cours de réécriture n'est pas destinée à ce serveur, mais elle est toujours traitée dans ce bloc de serveur. Les redirections sont donc correctement effectuées avec une directive de retour à la place, car tout traitement est arrêté et une réponse est envoyée immédiatement. NGINX décourage la réécriture pour la redirection ici: http://nginx.org/en/docs/http/converting_rewrite_rules.html
La syntaxe de la directive return est: URL du code retour; Comme vous faisiez initialement une réécriture permanente, vous pouvez donc utiliser 301 comme code pour répondre, indiquant qu'il s'agit d'une redirection permanente. Votre adresse https sera transmise dans la section url. Référence: http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return
Donc, votre configuration correcte serait
server {
listen 80;
server_name *.mydomain.com;
#Redirect all nonssl requests to ssl.
return 301 https://$server_name$request_uri;
}
Cela vous permettrait probablement de rediriger correctement vers votre domaine ssl, avec un bloc serveur générique. Vous pouvez également essayer le nom de serveur générique souligné '_' ou $ Host comme suggéré dans le commentaire ci-dessus. Faites le nous savoir!