2012-02-06 3 views
5

Ho installato nginx 1.0.8. ecco il mio problema: Ho 2 file: file1.js e file2.js. il percorso richiesto è qualcosa di simile:nginx - risposta basata sull'intestazione richiesta

www.mysite.com/files_dir/%user%/file.js

Se l'intestazione richiesto "X-Header" esiste ed ha il valore "OK" quindi il contenuto risposto dovrebbe essere file1.js else file2.js.

I file si trovano in "html/files_dir" e% user% è un insieme di directory che rappresenta i nomi utente registrati tramite il mio servizio.

Come si configura questo in nginx? Non sono interessato a php, asp o tecnologie simili solo se è possibile con nginx.

Grazie

risposta

9

map consente di definire il valore di una variabile in base a un'altra variabile. map devono essere dichiarati http livello (cioè al di fuori del server):

map $http_x_header $file_suffix { 
    default "2"; 
    OK  "1"; 
}; 

Poi il seguente location dovrebbe fare il trucco utilizzando le nuove variabili $file_suffix

location ~ ^(/files_dir/.+)\.js$ { 
    root html; 
    try_files $1$file_suffix.js =404; 
} 
1

Si potrebbe fare questo con nginx molto facilmente. Questo è l'esempio:

location /files_dir/ { 

    set $file = file2.js; 
    if ($http_x_header = OK) { 
     set $file = file1.js; 
    } 
    rewrite ^(/files_dir/.*)/file.js$ $1/$file last; 

} 

Si potrebbe leggere sulle variabili HTTP in Nginx here, e circa il modulo di riscrittura nginx here

+0

grazie sei risposta era anche buono, ma impostare $ file = file2.js; è senza "=" .. basta impostare $ file file2.js; –

+2

Consiglierei di leggere http://wiki.nginx.org/IfIsEvil quando si utilizzano ifs nella posizione. – MyGGaN