我有一个nginx proxy_pass
安装程序将/api
上的每个请求传递给后端Tomcat REST服务。在某些情况下,此服务会返回一个Location
标题,该标题根据请求类型而不同,例如Location: http://foo.bar/baz/api/search/1234567
- baz
部分归因于其托管在Tomcat上。使用nginx proxy_pass修改位置标题
我当前的配置正确地重写了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;
}
感谢您的回复,但我对重定向没有太大的兴趣(工作正常),但修改了作为服务器响应返回的“位置”标题。 API返回一个'Location'头,其中包含客户端应该获取其先前查询结果的URL。这现在指向错误的位置,因为服务器不知道它正在被代理。 – user2010963
proxy_redirect修改位置标题......这是它的目的。看看nginx文档(http://wiki.nginx.org/HttpProxyModule#proxy_redirect):) –
哦,我明白了!那确实做到了。谢谢! (尽管我确实认为'重定向'并不是它实际做的最好的名字) – user2010963