2010-08-12 26 views
27

¿Cómo puedo redireccionar desde https a http?nginx redirigir HTTPS a HTTP

tengo el siguiente código pero parece que no funciona.

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

¿podría aceptar la respuesta? – brupm

Respuesta

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

nginx [Pitfalls] (http://wiki.nginx.org/Pitfalls#Server_Name) y [IfIsEvil] (http://wiki.nginx.org/IfIsEvil). Este código probablemente debería refactorizarse en dos bloques separte 'server', uno que capture http y otro que capture https y luego' devuelve 301 http: // $ server_name $ request_uri; '. –

20

La respuesta anterior funcionará, es necesario generar un certificado autofirmado (o tener uno de verdad) y configurar Nginx como tal:

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

Tenga en cuenta, si se es un certificado autofirmado, el navegador le dará una advertencia desagradable.

+2

¿No es posible tener esta redirección sin la fea advertencia, sin comprar un certificado que no usaremos? ¡Gracias! – dgilperez

+0

Puede obtener un certificado SSL gratuito de startssl, que eliminaría las advertencias. Los certificados autofirmados siempre lanzarán las advertencias de las que está hablando. –

+3

También puede reemplazar '' reescribir^(. *) Http: //domain.com$1 permanent; '' con '' rewrite^(. *) Http: // $ host $ 1 permanent; '' si tiene varios servidores nombres especificados – ub3rst4r

13

Construido a partir del comentario jberger una configuración que debe funcionar sería:

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

Mejor aún, excepto que la pregunta es para https -> http. Cambie 'https' a' http' y mueva el 'devuelto 301 que resulta' http: // $ server_name $ request_uri; 'al bloque del servidor 443. – here

+0

Gracias @aquí. Actualizado. – krd

Cuestiones relacionadas