Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用nginx proxy\u pass修改位置标头_Regex_Nginx_Header_Rewrite_Proxypass - Fatal编程技术网

Regex 使用nginx proxy\u pass修改位置标头

Regex 使用nginx proxy\u pass修改位置标头,regex,nginx,header,rewrite,proxypass,Regex,Nginx,Header,Rewrite,Proxypass,我有一个nginxproxy\u pass设置,可以通过/api将每个请求传递到后端Tomcat REST服务。在某些情况下,此服务返回一个Location头,该头根据请求的类型而变化,例如Location:http://foo.bar/baz/api/search/1234567--baz部分是因为它托管在Tomcat上 我当前的配置正确地重写了foo.bar主机名,但保留了baz部分。我想去掉这个选项,但proxy_pass选项似乎仅限于清除或设置标题的新值 例如,有没有一种方法可以在将头传

我有一个nginx
proxy\u 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/ /;

foo.bar/baz/
的任何位置标题都将转到
/

如果您只想重定向
/baz/api
,那也行

如果任何重定向也在添加端口,则需要添加
http://foo.bar:8080/baz/
以及(单独重定向)


希望这有帮助

感谢您的回复,但我对重定向(工作正常)不太感兴趣,而是对修改作为服务器响应返回的
位置
标题感兴趣。API返回一个
Location
头,其中包含客户端应该在其中获取其先前查询结果的URL。这现在指向一个错误的位置,因为服务器不知道它正在被代理。proxy\u redirect修改位置头。。。这就是它的目的。看看nginx文档():)哦,我明白了!这确实做到了。非常感谢。(尽管我确实认为
重定向
并不是它实际工作的最佳名称)同意!我认为重写或类似的东西会更有意义lol@ChelseaUrquhart如何只修改URL的某些部分而不是整个URL?