根据一个网络适配器上的主机头确定将请求转发到虚拟机环境中的哪个服务器

根据一个网络适配器上的主机头确定将请求转发到虚拟机环境中的哪个服务器

正如问题标题所述:我正在尝试弄清楚如何根据所述请求的主机标头来辨别将网络流量传递给哪个 Web 服务器。我正在使用主机服务器上的一个网络适配器,我的所有客户操作系统都共享该适配器。这种设置既是出于必要(我可用的硬件有限),也是出于我想学习该技术的愿望,以便尽可能多地利用我的组件。

有人知道如何在同一个 ESXi 环境中实现这一点吗?

答案1

在 ESXi 环境中创建一个运行 nginx 的新 VM,并使用代理模块来引导您的流量:

server {
    listen       80;
    server_name  hostname1 hostname2 hostname3 ... hostnameN;
    if ($http_host = hostname1) {
        proxy_pass http://192.168.0.1;
    }
    if ($http_host = hostname2) {
        proxy_pass http://192.168.0.2;
    }
    if ($http_host = hostname3) {
        proxy_pass http://192.168.0.3;
    }
    #...
    if ($http_host = hostnameN) {
        proxy_pass http://192.168.0.N;
    }
}

酱:模块 ngx_http_proxy_module

答案2

对网站的请求被解析为 IP 地址。

然后流量会被路由到您的网络。

您的防火墙/路由器将公共 IP 地址转换为私有 IP 地址(基于您的 IP 地址转换配置)。

然后,您的防火墙/路由器会对相关 IP 地址的 MAC 地址执行 ARP。

相关虚拟机应答该ARP请求。

您的防火墙/路由器将流量发送到 MAC 地址。

您的交换机将流量转发到适当的交换机端口(基于其 MAC 地址表)。

流量穿过 ESXi 主机 pNIC(未掺杂任何成分)。

相关虚拟机消耗流量并将其定向到适当的网站(在您使用主机头或 Linux 等效项在单个 Web 服务器上托管多个网站的情况下)或适当的 Web 服务器(在您使用代理服务器和多个 Web 服务器的情况下)。

相关内容