2012-02-06 5 views
5

У меня установлен nginx 1.0.8. вот моя проблема: У меня 2 файла: file1.js и file2.js. запрошенный путь что-то вроде этого:nginx - ответ на основе запрошенного заголовка

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

Если запрашиваемый заголовок: "X-заголовок" существует и значение «OK», то ответный контент должен быть file1.js else file2.js.

Файлы находятся в «html/files_dir», а% user% - это набор каталогов, представляющих имена пользователей, зарегистрированных через мою службу.

Как настроить это в nginx? Меня не интересуют php, asp или подобные технологии, только если это возможно с nginx.

Спасибо

ответ

9

map позволяет определить значение переменной, основываясь на другой переменной. map должны быть объявлены на http уровне (т.е. вне server):

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

Тогда следующий location следует сделать трюк с использованием новых переменных $file_suffix

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

Вы можете сделать это с помощью nginx очень легко. Это пример:

location /files_dir/ { 

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

} 

Вы можете прочитать о HTTP переменных в NGINX here и о модуле переписывания Nginx here

+0

спасибо вы ответ был также хорош, но установить $ file = file2.js; без "=" .. просто установите $ file file2.js; –

+2

Я бы рекомендовал прочитать http://wiki.nginx.org/IfIsEvil при использовании ifs в местоположении. – MyGGaN