2011-12-08 15 views
10

Attualmente sto eseguendo il mio sito su http e voglio spostarlo su https in modo tale che nginx gestisca il reindirizzamento automagicamente. Questo è abbastanza banale da fare, immagino.Reindirizza tutti i http a https in nginx, tranne un file

Tuttavia, esiste un file che (per diversi motivi) è collegato a caldo da altri siti, alcuni dei quali sono su http e alcuni su https. Voglio assicurarmi che il file sia disponibile sia su http che su https, in modo da garantire che i browser non si lamentino della finestra di dialogo "mixed content". Il percorso del file simile a questa:

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

Quindi, la regola nginx dovrebbe dire: "Se la richiesta è già finito https, tutto è dolce, e solo proxy inverso. Altrimenti, reindirizza tutte le richieste da http a https, a meno che non sia richiesto questo file, nel qual caso non eseguire alcun reindirizzamento http-> https. "

Qualcuno può dirmi dove cercare informazioni su tale configurazione o aiutarmi con la configurazione stessa? Grazie in anticipo. (Mi dispiace, ma non sono abbastanza abile ancora in configurazione di nginx.)

risposta

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

    [....] 
} 

È possibile che questo dovrebbe per lo più fare il trucco se non im sbagliato

+3

Questo non sembra escludere il file che voglio escludere. O mi sbaglio? –

+0

+1 per la soluzione che non include la logica in un blocco 'location'. – orokusaki

3

Prova questa:

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

Questo è quello che ho fatto, che funziona:

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

Questo gestisce solo le richieste HTTP e serve il suddetto file di - altrimenti rosso iride a https. Definisci il tuo blocco server SSL, che servirà tutte le richieste https.

server { 
    listen   443; 
    server_name example.com; 

    ssl   on; 

    # rest of the config 
} 

In questo modo il file di script sarà disponibile su http e su https.

Problemi correlati