2011-12-08 16 views
10

Actualmente estoy ejecutando mi sitio en http, y quiero moverlo a https para que nginx maneje la redirección automágicamente. Esto es bastante trivial, supongo.Redirigir todos los http a https en nginx, excepto un archivo

Sin embargo, hay un archivo que (por varias razones) está vinculado de otros sitios, algunos de los cuales están sobre http y otros sobre https. Quiero asegurarme de que el archivo esté disponible tanto en http como en https, para garantizar que los navegadores no se quejen con el cuadro de diálogo "contenido mixto". La ruta del archivo se ve algo como esto:

http (s): //mydomain.com/scripts/ [some_sha1_hash] /file.js

Así, la regla nginx debería decir: "Si la solicitud ya está sobre https, todo es bueno, y solo proxy inverso. De lo contrario, redirija todas las solicitudes de http a https, excepto si se solicita este archivo, en cuyo caso no realice ninguna redirección http-> https ".

¿Alguien puede decirme dónde buscar para aprender acerca de una configuración de este tipo, o ayudarme con la configuración en sí? Gracias por adelantado. (Lo siento, pero no soy experto suficiente todavía en la configuración de nginx.)

Respuesta

-2
server { 
    listen   80; 
    server_name my.domain.com; 
    rewrite  ^https://$server_name$request_uri? permanent; 
} 

server { 
    listen   443; 
    server_name my.domain.com; 

    ssl   on; 

    [....] 
} 

Lo anterior se debe sobre todo hacer el truco, si no estoy equivocado

+3

Esto no parece excluir el único archivo que deseo excluir. ¿O estoy equivocado? –

+0

+1 para la solución que no incluye lógica en un bloque 'ubicación'. – orokusaki

3

Prueba esto:

server { 
    listen 80; ssl off; 
    listen 443 ssl; 
    server_name example.com; 

    # <ssl settings> 
    # ... other settings 

    location = /scripts/[some_sha1_hash]/file.js { 
    # Empty block catches the match but does nothing with it 
    } 

    location/{ 
    if ($scheme = "http") { 
     rewrite^https://$http_host$request_uri? permanent; 
    } 

    # ... other settings 
    } 
} 
5

Esto es lo que hice, lo que funciona:

server { 
    listen 80; 
    server_name example.com; 
    charset  utf-8; 
    access_log /var/www/path/logs/nginx_access.log; 
    error_log /var/www/path/logs/nginx_error.log; 

    location /path/to/script.js { 
      # serve the file here 
    } 
    location/{ 
     return 301 https://example.com$request_uri; 
    } 
} 

Ésta sólo se ocupa de las peticiones HTTP y sirve dicho archivo - de lo contrario roja irects a https. Defina su bloque de servidor ssl, que atenderá todas las solicitudes https.

server { 
    listen   443; 
    server_name example.com; 

    ssl   on; 

    # rest of the config 
} 

De esta manera, su archivo de script estará disponible tanto en http como en https.

Cuestiones relacionadas