nginx重写POST请求

nginx重写POST请求,post,nginx,url-rewriting,request,Post,Nginx,Url Rewriting,Request,我需要向我的nginx前端服务器发送POST请求,该服务器应将其重定向到上游服务器。 详情如下: 将请求发送到,此请求中的URL应更改为 但在nginx错误日志中,我看到我的请求从POST更改为GET,并且似乎没有更改URL: "POST /foo/bar/blah HTTP/1.1" 301 185 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) "GET /foo/bar/blah/ HTTP/1.1" 404 117 "-" "Mozilla/5.0 (W

我需要向我的nginx前端服务器发送POST请求,该服务器应将其重定向到上游服务器。 详情如下:

将请求发送到,此请求中的URL应更改为

但在nginx错误日志中,我看到我的请求从POST更改为GET,并且似乎没有更改URL:

"POST /foo/bar/blah HTTP/1.1" 301 185 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64)
"GET /foo/bar/blah/ HTTP/1.1" 404 117 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) 
如何保留我的帖子请求并更改URL

还有我的重写规则

      rewrite ^/foo/blah^/ /$1 break;
我发现了很多改变URL的例子,它们看起来都一样。 我真的很奇怪,这个重写规则如何将URL从/foo/bar/blah/更改为/foo/blah/: 在文件中说:

如果指定的正则表达式与请求URI匹配,则URI为 按照替换字符串中的指定进行了更改

但是在我的例子中,请求URI是/foo/bar/blah/so正则表达式/foo/blah^/与URI不匹配,所以这个规则不应该起作用。 我说得对吗

任何建议都会有帮助

UPD: 固定的:


我猜,你不需要重写

location /foo/bar/ {
  proxy_pass http://myapp/;
}

这应该会从代理URL中删除
/foo/bar
部分。

如果您发布到
/foo/bar/blah
,那么即使
位置/foo/bar/blah/
也不应该与之匹配(没有尾随斜杠)。//如果您希望客户端在重定向时不更改请求方法,然后需要使用
307临时重定向
。但看起来您并不希望实际重定向客户端,而是在内部传递数据,以便nginx充当代理。这些是不同的东西…那么如何创建正确的规则呢?我刚刚删除了我的重写尾随斜杠,它似乎开始发送帖子,但仍然没有重写,谢谢。我把它改成了
location=/foo/bar/blah{proxy\u passhttp://myapp/foo/blah}
并且它按预期工作。@您应该接受这个答案,这样Alexey就可以获得学分了
 location = /foo/bar/blah {
          proxy_pass http://myapp/foo/blah;
       }
location /foo/bar/ {
  proxy_pass http://myapp/;
}