有时候需要将来自不同端口的服务代理到同一个域名上,利用 nginx 可以轻易实现这样的需求,记录如下。

需求如下,两个 node 服务分别启动在 88889999 端口,然后在访问时需要将 api.com/version1 代理到 127.0.0.1:8888,将 api.com/version2 代理到 127.0.0.1:9999

利用 nginxlocation,搭配 proxy_pass 来实现此功能的伪代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 80;
server_name api.com;

location / {
root /root/www;
index index.html;
}

location ^~ /version1/ {
proxy_pass http://127.0.0.1:8888/;
}

location ^~ /version2/ {
proxy_pass http://127.0.0.1:9999/;
}
}

此时,访问 api.com/version1/getUserInfo 将访问到 127.0.0.1:8888/getUserInfo,同理,访问 api.com/version2/getUserInfo 将访问到 127.0.0.1:9999/getUserInfo

注意proxy_pass 最后的 / 不能丢,否则,api.com/version1/getUserInfo 将访问到 127.0.0.1:8888/version1/getUserInfo

location 的匹配规则与优先级的详细可以访问,nginx配置location总结及rewrite规则写法