Dans Nginx, comment puis-je réécrire toutes les requêtes HTTP à https tout en maintenant le sous-domaine?

Je souhaite réécrire toutes les requêtes http sur mon serveur Web pour être des demandes https, j'ai commencé avec ce qui suit:

 Serveur {
     Écouter 80;

     emplacement / {
       Réécrivez ^ (. *) Https: //mysite.com$1 permanent;
     }
 ...

Un problème est que cela efface toute information sur le sous-domaine (par exemple, node1.mysite.com/folder), comment puis-je réécrire ce qui précède pour renvoyer tout à https et maintenir le sous-domaine?

3 Solutions collect form web for “Dans Nginx, comment puis-je réécrire toutes les requêtes HTTP à https tout en maintenant le sous-domaine?”

Voie correcte dans les nouvelles versions de nginx

Résultat de ma première réponse à cette question était correcte à un certain moment, mais il s'est transformé en un autre piège – pour rester à jour s'il vous plaît vérifier Taxer réécrire les pièges

J'ai été corrigé par de nombreux utilisateurs de SE, donc le crédit leur va, mais plus important encore, voici le code correct:

server { listen 80; server_name my.domain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name my.domain.com; # add Strict-Transport-Security to prevent man in the middle attacks add_header Strict-Transport-Security "max-age=31536000"; [....] } 

REMARQUE: la meilleure façon de le faire a été fournie par https://serverfault.com/a/401632/3641 – mais est répété ici:

 server { listen 80; return 301 https://$host$request_uri; } 

Dans le cas le plus simple, votre hôte sera fixé pour être votre service auquel vous souhaitez les envoyer – cela fera une redirection 301 au navigateur et l'URL du navigateur sera mise à jour en conséquence.

Voici la réponse précédente, qui est inefficace en raison de Regex, un simple 301 est génial, comme le montre @kmindi

J'ai utilisé nginx 0.8.39 et au-dessus, et j'ai utilisé ce qui suit:

  server { listen 80; rewrite ^(.*) https://$host$1 permanent; } 

Envoie une redirection permanente au client.

Je pense que la meilleure et la seule manière devrait être d'utiliser un HTTP 301 Moved Redirection permanente comme ceci:

 server { listen [::]:80; return 301 https://$host$request_uri; } 

Le HTTP 301 301 Moved La redirection permanente est également la plus efficace car il n'y a pas de regex à évaluer, selon les pitbins déjà mentionnés.

Si vous ne souhaitez pas modifier le nom d'hôte (et le sousdomaine ), ceci est la manière.

Cela fonctionne toujours si vous n'avez pas de DNS , car je l'utilise également localement. Je demande par exemple avec http://192.168.0.100/index.php et je reviendrai vers exactement https://192.168.0.100/index.php .

J'utilise l' listen [::]:80 sur mon hôte car j'ai bindv6only à false , donc il se lie également au socket ipv4. Changez-le pour listen 80 si vous ne voulez pas IPv6 ou souhaitez vous lier ailleurs.

La solution de Saif Bechan utilise le server_name qui dans mon cas est localhost mais qui n'est pas accessible sur un réseau.

La solution de Michael Neale est bonne, mais selon les pitbails, il y a une meilleure solution avec la redirection 301;)

  • Apache catchall config
  • htaccess redirection de wordpress page vers une page php
  • Quel logiciel pour la redirection sans fil à la page TOU?
  • Rediriger un vhost vers un autre server avec SSL dans Apache
  • Mon pare-feu linux est-il sécurisé?
  • mod_rewrite et VirtualHosts: comment redirect un site, mais garder les autres?
  • Le server CentOS 7 ne charge pas les ressources Webapp
  • Apache / Tomcat Redirect
  • isapi_redirect avec iis et ssl
  • htaccess et fin de la barre oblique
  • Puis-je utiliser les variables Apache avec `Redirect` de mod_alias, au lieu d'utiliser mod_rewrite?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.