将站点重定向到主机上的正确虚拟机

将站点重定向到主机上的正确虚拟机

我想设置一些带有几个虚拟机的服务器。然后每个虚拟机将容纳不同的站点。因此,例如,我的主机有 DNS my.host.com,我将指向此 DNS,例如其他 DNS 地址,因此 my.host.com - 1.2.3.4 my.host.com - virtual1.host.com my.host.com - virtual2.host.com

现在私有网络上的 VM 的地址是:vm1 - 1.1.1.1 - 并且她拥有网站 virtual1.host.com vm1 - 2.2.2.2 - 并且她拥有网站 virtual2.host.com

所以我的问题是如何重定向到正确的 VM,我的意思是如果我点击 virtual1.host.com 我将转到我的主机并且主机应该将我重定向到该站点。

我只想使用端口 80 或 443。我可以使用哪种防火墙或代理进行这种类型的重定向?也许使用 iptables 就足够了,我也在考虑 HAproxy?

有什么建议吗?谢谢。

答案1

好的伙计们,我在主机上做了我想做的事情,我使用了 iptables,我丢弃了 80 到 8080 以及 443 到 8443 上的所有流量,用于 nginx 代理,然后从代理将其发送到正确的地址。虚拟机(代理)和虚拟机(站点)之间的通信始终在端口 80 上

我必须在有代理的 VM 上设置证书并将其签名到正确的 DNS,然后通过 proxy_pass 发送到目的地,这里有一个 confs 的示例:

iptables -t nat -A PREROUTING -d host_ip/32 -i eth0 -p tcp -m multiport --dports 80 -j DNAT --to-destination proxy_ip:8080
iptables -t nat -A PREROUTING -d host_ip/32 -i eth0 -p tcp -m multiport --dports 443 -j DNAT --to-destination proxy_ip:8443
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

然后我的 nginx 以 chroot 模式运行,并且有一个配置:

server {
   listen       8080 ;
   server_name site_dns;
   rewrite        ^ https://$server_name$request_uri? permanent;
}

server {
  listen       8443 default_server;
  server_name site_dns;
  ssl on ;
  ssl_certificate /etc/nginx/server.crt;
  ssl_certificate_key /etc/nginx/server.key;
  access_log /var/log/nginx/site.access.log ;
  error_log  /var/log/nginx/site.error.log ;



  location / {
      proxy_pass  http://site_ip_vm;
      proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
      proxy_cache            one;
      proxy_cache_key         site$request_uri;
      proxy_cache_valid      200 3h;
      proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;
      proxy_ignore_headers   Expires Cache-Control;
      proxy_redirect http:// https://;
      proxy_buffering on;
      proxy_set_header        Host            $host;
      proxy_set_header        X-Real-IP       $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

并且 apache 仅在端口 80 上监听。因此,所有与证书相关的计算都在代理站点上完成,并且 apache 不会承受负担,而且缓存机制必须给我带来良好的性能,无论如何,我会在一段时间后看到结果。

相关内容