使用 Nginx 将不同子域反向代理到不同位置的典型方法是为每个子域安装一个唯一的服务器,如下所示:
server {
server_name subdomain1.example.com;
location / {
proxy_pass http://hostname1:port1;
}
}
server {
server_name subdomain2.example.com;
location / {
proxy_pass http://hostname2:port2;
}
}
通过在该服务器块中指定不同的位置,是否可以在单个服务器块(例如 server_name .example.com,没有任何指定的子域)内实现相同的结果?
如果您指定不同的位置,那么结果将与您
location /
在两个server
块中的相同。对的,这是可能的。
首先,设置一个
map
将域映射到proxy_pass
目的地:当 nginx 收到请求时,它会转到
proxy_pass
指令。然后它$dest
使用解析map
,它将不同的虚拟主机名映射到目标。然后 nginx 使用解析的目标代理请求。请记住正确设置默认目的地。每个公共 Web 服务器都会收到对各种域名的请求。通常,您希望在未知虚拟主机上返回 404。