2012-02-06 106 views
5

我安装了nginx 1.0.8。 这里是我的问题: 我有2个文件:file1.jsfile2.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; 

} 

你可以阅读有关NGINX here HTTP变量,以及有关nginx的重写模块here

+0

感谢这样的伎俩你回答得也不错,但设置$ file = file2.js;没有“=”..只需设置$ file file2.js; – 2012-02-07 15:57:35

+2

我推荐阅读http://wiki.nginx.org/IfIsEvil在位置使用ifs。 – MyGGaN 2013-03-06 10:05:36