簡體   English   中英

Nginx根據標頭值重寫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM