[英]Nginx rewrite based on header value
我有一個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;
}
}
我想配置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模塊,但是其中的許多警告使我對使用它感到猶豫。
謝謝,
河
編輯
如果沒有匹配項,我想立即從nginx返回412 Precondition Failed
。
如果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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.