2012-02-06 14 views
5

Tengo nginx 1.0.8 instalado. aquí está mi problema: Tengo 2 archivos: archivo1.js y archivo2.js. la ruta solicitada es algo como esto:nginx - respuesta basada en el encabezado solicitado

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

Si el encabezado solicitado: "encabezado X" existe y tiene el valor "OK", entonces el contenido respondido debe ser file1.js else file2.js.

Los archivos están situados en "html/files_dir" y% user% es un conjunto de directorios que representa los nombres de usuario registrados a través de mi servicio.

¿Cómo configuro esto en nginx? No estoy interesado en php, asp o tecnologías similares solo si es posible con nginx.

Gracias

Respuesta

9

map le permite definir el valor de una variable en función de otra variable. map debe declararse al http nivel (es decir, fuera de server):

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

A continuación, el siguiente location debe hacer el truco usando sus nuevas variables $file_suffix

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

Puede hacer esto con nginx muy fácilmente. Este es un ejemplo:

location /files_dir/ { 

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

} 

Usted puede leer acerca de las variables HTTP en Nginx here, y sobre el módulo de reescritura nginx here

+0

gracias eres respuesta fue buena, pero también establecer $ file = file2.js; es sin "=" .. simplemente configure $ file file2.js; –

+2

Recomiendo leer http://wiki.nginx.org/IfIsEvil cuando use ifs en la ubicación. – MyGGaN

Cuestiones relacionadas