2010-08-12 20 views
27

Comment puis-je redire de https à http? J'ai le code ci-dessous mais cela ne semble pas fonctionner.nginx rediriger HTTPS vers HTTP

server { 
     listen 443; 
     server_name example.com; 
     rewrite ^(.*) http://example.com$1 permanent; 
} 
+1

-vous s'il vous plaît accepter la réponse? – brupm

Répondre

0
if ($host = 'foo.com') { 
     rewrite ^/(.*)$ http://www.foo.com$1 permanent; 
    } 
+6

nginx [Pièges] (http://wiki.nginx.org/Pitfalls#Server_Name) et [IfIsEvil] (http://wiki.nginx.org/IfIsEvil). Ce code devrait probablement être refactorisé en deux blocs 'server' séparés, un qui attrape http et un autre qui attrape https, puis' return 301 http: // $ server_name $ request_uri; '. –

20

La réponse fonctionnera ci-dessus, vous devez générer un auto-signé cert (ou un vrai) et configurer nginx comme tel:

server { 
    listen *:443; 
    ssl on; 
    server_name domain.com; 
    rewrite ^(.*) http://domain.com$1 permanent; 

    ssl_certificate  /data/certs/domain.crt; 
    ssl_certificate_key /data/certs/domain.key; 
} 

Gardez à l'esprit, si elle est un cert autosigné le navigateur vous donnera un avertissement moche.

+2

N'est-il pas possible d'avoir cette redirection sans l'avertissement moche, sans acheter un certificat que nous n'utiliserons pas? Merci! – dgilperez

+0

Vous pouvez obtenir un certificat SSL gratuit de startssl, qui supprimerait les avertissements. Les certificats auto-signés lanceront toujours les avertissements dont vous parlez. –

+3

Vous pouvez également remplacer '' réécrire^(. *) Http: //domain.com$1 permanent; '' avec '' réécrire^(. *) Http: // $ host $ 1 permanent; '' si vous avez plusieurs serveurs noms spécifiés. – ub3rst4r

13

bâtiment hors commentaire de jberger une configuration qui devrait fonctionner serait:

server { 
    listen *:80; 
    server_name example.com; 
} 

server { 
    listen    *:443 ssl; 
    server_name   example.com; 
    ssl_certificate  /etc/ssl/certs/example.com.cert; 
    ssl_certificate_key /etc/ssl/private/example.com.key; 
    return 301 http://$server_name$request_uri; 
} 
+1

Mieux encore, sauf que la question demande https -> http. Remplacez 'https' par' http' et déplacez le résultat 'return 301 http: // $ nom_serveur $ request_uri;' vers le bloc serveur 443. – here

+0

Merci @ici. Actualisé. – krd