簡體   English   中英

使用nginx proxy_pass修改Location標頭

[英]Modifying a Location header with nginx proxy_pass

我有一個nginx proxy_pass設置將/api上的每個請求傳遞給后端Tomcat REST服務。 在某些情況下,此服務返回一個Location頭,該頭根據請求的類型而變化,例如, Location: http://foo.bar/baz/api/search/1234567 - baz部分是由於它托管在Tomcat上。

我當前的配置正確地重寫了foo.bar主機名,但保留了baz部分。 我想剝離它,但proxy_pass選項似乎僅限於清除或設置標頭的新值。

有沒有辦法在傳遞到客戶端之前動態修改標頭,例如使用正則表達式替換? 這是我的nginx配置:

location /api {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_max_temp_file_size 0;
    client_max_body_size    10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout   90;
    proxy_send_timeout      90;
    proxy_read_timeout      90;
    proxy_buffers           32 4k;
    proxy_redirect off;

    proxy_pass http://foo.bar:8080/baz/api;
}

您可以使用regexp來修改它,但更好的方法是使用代理重定向:

proxy_redirect http://foo.bar/baz/ /;

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

foo.bar/baz/任何位置標頭都會轉到/

如果你只是想重定向/baz/api ,那也會有效。

如果任何重定向也添加端口,您還需要添加http://foo.bar:8080/baz/ (單獨重定向)。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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