nginx proxy_pass 根据请求传递到 url

nginx proxy_pass 根据请求传递到 url

是否可以根据请求域配置 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。

相关内容