问题描述

有这么一个需求,我需要将一个请求重写到另一个地址,然后再将这个地址代理到另一个服务。这个需求在实际开发中是很常见的,比如我们需要将一个旧的接口地址重写到新的接口地址,然后再将新的接口地址代理到后端服务。

如:请求 http://example.com/v1
重写到 http://example.com/v2 然后再将 http://example.com/v2 代理到后端服务 http://127.0.0.1:8080/v2

解决方案

在 Nginx 中,我们可以使用 rewrite 指令和 proxy_pass 指令来实现这个需求。

1
2
3
4
5
6
7
8
server {
listen 80;
server_name example.com;

location /v1/ {
rewrite ^/v1/(.*) /v2/$1 break;
proxy_pass http://127.0.0.1:8080
}

详细的参数说明:

$1:匹配的第一个括号中的内容,即请求的路径。
break:表示匹配成功一次后就停止匹配,不再继续匹配其他规则。