基于请求头的 Nginx 响应

5
我安装了nginx 1.0.8。我的问题是这样的:我有两个文件: file1.js和file2.js。请求路径如下所示:
www.mysite.com/files_dir/%user%/file.js
如果请求头中存在“X-Header”并且其值为“OK”,则响应的内容应该是file1.js,否则是file2.js。
这些文件位于“html/files_dir”中,%user%是一组目录,表示通过我的服务注册的用户名。
如何在nginx中配置此功能?我只关心nginx,不关心php、asp或类似技术。
谢谢。
2个回答

10

map 允许你根据另一个变量来定义变量的值。应该在 http 层次(即在 server 之外)声明 map

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

使用你的新变量 $file_suffix,以下的location应该能够起到作用

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 HTTP变量的内容here,以及有关nginx重写模块的内容here


谢谢,你的回答也很好,但是 set $file = file2.js; 是没有 "=" 的。只需要设置 $file file2.js; 即可。 - Doua Beri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接