是否可以根据请求域配置 nginx(或 apache)以使用不同的后端服务器?
例如:
For a request for srv1.pod1.mydomain.com should go to srv1.pod1.external
For a request for srv1.pod2.mydomain.com should go to srv1.pod2.external
...
For a request for srv1.podN.mydomain.com should go to srv1.podN.external
我正在查看重写规则,但它似乎没有重写域,只是重写了路径。
server {
listen 80 ([^.]+).(\w+).mydomain.com;
server_name _;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
proxy_pass $1.$2.external;
}
}
答案1
您的配置似乎有点问题。服务器名称不适用于listen
指令,而且您的正则表达式有错误。试试这个:
server {
listen 80;
server_name ~^(?<sub1>[^\.]+)\.(?<sub2>\w+)\.mydomain\.com;
resolver 8.8.8.8;
location / {
proxy_set_header Host $sub1.$sub2.external;
proxy_pass http://$sub1.$sub2.external;
}
}
当您使用域名指定后端服务器时,需要指定附加参数resolver
在您的服务器配置中。您可以使用本地名称服务器(如果有),或者使用外部服务器,例如 Google 公共 DNS(8.8.8.8)或 ISP 为您提供的 DNS。