我有一个基本上看起来像nginx.conf(省略了不必要的部分):
upstream app {
server unix:/tmp/unicorn.myapp.sock fail_timeout=0;
}
server {
listen 80;
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app;
}
}
Run Code Online (Sandbox Code Playgroud)
我想配置nginx,以便使用特定标头的值来重写传递给上游的url.
举例来说,假设我有一个请求/test与头Accept: application/vnd.demo.v1+json.我希望它被重定向到上游URL /v1/test,即基本上上游应用程序将收到/v1/test没有标题的请求.
同样,应将请求/test和标头Accept: application/vnd.demo.v2+json重定向到上游URL /v2/test.
这可行吗?我查看了IfIsEvil nginx模块,但那里的许多警告让我对使用它犹豫不决.
谢谢,
河
编辑
如果没有匹配,我想412 Precondition Failed立即从nginx 返回.
如果Accept标头不包含必需的标头返回错误.
map $http_accept $version {
default "";
"~application/vnd\.demo\.v2\+json" "v2";
"~application/vnd\.demo\.v1\+json" "v1";
}
server {
location @app {
if ($version = "") {
return 412;
}
...;
proxy_pass http://app/$version$uri$is_args$args;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5176 次 |
| 最近记录: |