2010-08-12 10 views
27

Wie kann ich von https auf http umleiten?nginx umleiten HTTPS zu HTTP

Ich habe den Code unten, aber es scheint nicht zu funktionieren.

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

würden Sie bitte akzeptieren die Antwort? – brupm

Antwort

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

nginx [Fallstricke] (http://wiki.nginx.org/Pitfalls#Server_Name) und [IfIsEvil] (http://wiki.nginx.org/IfIsEvil). Dieser Code sollte wahrscheinlich in zwei separate "Server" -Bausteine ​​refactoriert werden, von denen einer HTTP abfängt und ein anderer HTTP abfängt und dann 'http: // $ Servername $ request_uri;' zurückgibt. –

20

Die Antwort oben funktioniert, müssen Sie ein selbst signiertes Zertifikat (eine reale oder haben) zu erzeugen und konfigurieren nginx als solche: Wenn es

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; 
} 

Denken Sie daran, ist ein selbstsigniertes Zertifikat der Browser wird Ihnen eine hässliche Warnung geben.

+2

Ist es nicht möglich, diese Weiterleitung ohne die hässliche Warnung zu haben, ohne ein Zertifikat zu kaufen, das wir nicht verwenden werden? Vielen Dank! – dgilperez

+0

Sie können ein kostenloses SSL-Zertifikat von startssl erhalten, das würde die Warnungen loswerden. selbstsignierte Zertifikate werden immer die Warnungen enthalten, über die Sie sprechen. –

+3

Sie können auch '' rewrite^(. *) Http: //domain.com$1 permanent; '' '' rewrite^(. *) Http: // $ host $ 1 permanent; '' wenn Sie mehrere Server haben Namen angegeben. – ub3rst4r

13

Gebäude jberger Kommentar eine Konfiguration aus, die wäre funktionieren sollte:

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

Beste noch, außer die Frage bittet um https -> http. Ändern Sie die "https" in "http" und verschieben Sie die resultierende "Rückgabe" http: // $ Servername $ request_uri; 'in den Serverblock 443. – here

+0

Danke @here. Aktualisiert. – krd