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

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

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

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规则写法