Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

nginx - response based on the requested header

I have nginx 1.0.8 installed. here is my problem: I have 2 files : file1.js and file2.js. the requested path is something like this:

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

If the requested header : "X-Header" exists and has the value "OK" then the responded content should be file1.js else file2.js.

The files are situated in "html/files_dir" and %user% is a set of directories that represents the usernames registered through my service.

How do I configure this in nginx? I'm not interested in php, asp or similar technologies only if it's possible with nginx.

Thanks

like image 528
Doua Beri Avatar asked Feb 06 '12 22:02

Doua Beri


2 Answers

map lets you define a variable's value based on another variable. map should be declared at http level (i.e. outside of server):

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

Then the following location should do the trick using your new variable $file_suffix

location ~ ^(/files_dir/.+)\.js$ {
  root html;
  try_files $1$file_suffix.js =404;
}
like image 145
Alexander Azarov Avatar answered Oct 19 '22 05:10

Alexander Azarov


You could do this with nginx very easily. This is example:

location /files_dir/ {

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

}

You could read about HTTP variables in NGINX here , and about nginx rewrite module here

like image 38
Sergei Lomakov Avatar answered Oct 19 '22 05:10

Sergei Lomakov