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)
我的猜测是,您不需要重写。
location /foo/bar/ {
proxy_pass http://myapp/;
}
Run Code Online (Sandbox Code Playgroud)
这应该/foo/bar从代理URL中删除部分。
| 归档时间: |
|
| 查看次数: |
9418 次 |
| 最近记录: |