web-dev-qa-db-fra.com

rediriger les sous-domaines génériques vers https (nginx)

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?

20
whatWhat

C'est tout...

server {
    listen      80;
    server_name *.mydomain.com;

     #Rewrite all nonssl requests to ssl.
     return 301 https://$Host$request_uri;
}
49
cadmi

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!

2
Apurva Sukant