nginx重写POST请求
我需要向我的nginx前端服务器发送POST请求,该服务器应将其重定向到上游服务器。 详情如下: 将请求发送到,此请求中的URL应更改为 但在nginx错误日志中,我看到我的请求从POST更改为GET,并且似乎没有更改URL: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
"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/;
}