nginx将多个服务代理到同一域名
2017年6月7日
有时候需要将来自不同端口的服务代理到同一个域名上,利用 nginx
可以轻易实现这样的需求,记录如下。
需求如下,两个 node
服务分别启动在 8888
和 9999
端口,然后在访问时需要将 api.com/version1
代理到 127.0.0.1:8888
,将 api.com/version2
代理到 127.0.0.1:9999
。
利用 nginx
的 location
,搭配 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规则写法。