nginx重写POST请求

Tra*_*rse 3 post nginx url-rewriting request

我需要将POST请求发送到我的Nginx前端服务器,该服务器应将其重定向到上游服务器。详细说明:

发送请求到http://192.168.0.10/foo/bar/blah,此请求中的URL应该更改为http://192.168.0.21 [22,23]:8080 / foo / blah

upstream myapp {
   server 192.168.0.21:8080;
   server 192.168.0.22:8080;
   server 192.168.0.23:8080;
}

server {
    listen       80;
    server_name  localhost;

   location /foo/bar/blah/ {
      rewrite ^/foo/blah^/ /$1 break;
      proxy_pass http://myapp;
   }
Run Code Online (Sandbox Code Playgroud)

但是在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) 
Run Code Online (Sandbox Code Playgroud)

如何保留我的POST请求并更改URL?

也关于我的重写规则

      rewrite ^/foo/blah^/ /$1 break;
Run Code Online (Sandbox Code Playgroud)

我发现了很多更改URL的示例,它们看起来都是一样的。我真的很奇怪,这个重写规则如何将URL从/ foo / bar / blah /更改为/ foo / blah /:在documentaion中说:http : //nginx.org/en/docs/http/ngx_http_rewrite_module。 html#rewrite

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

但在我的情况下,请求URI是/ foo / bar / blah /,因此正则表达式/ foo / blah ^ /与URI不匹配,因此该规则不起作用。我对吗?

任何建议都会有帮助。

UPD: 固定:

 location = /foo/bar/blah {
          proxy_pass http://myapp/foo/blah;
       }
Run Code Online (Sandbox Code Playgroud)

Ale*_*Ten 5

我的猜测是,您不需要重写。

location /foo/bar/ {
  proxy_pass http://myapp/;
}
Run Code Online (Sandbox Code Playgroud)

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