Назад | Перейти на главную страницу

Перенаправить сайт на правильную виртуальную машину на хосте

Я хотел бы установить какой-нибудь сервер с несколькими виртуальными машинами на нем. И тогда каждая виртуальная машина будет содержать разные сайты. Итак, у моего хоста, например, есть 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

Теперь адреса виртуальной машины в частной сети: vm1 - 1.1.1.1 - и она держит сайт virtual1.host.com vm1 - 2.2.2.2 - и она держит сайт virtual2.host.com

Итак, мой вопрос в том, как я могу перенаправить на правильную виртуальную машину. Я имею в виду, что если я нажму virtual1.host.com, я перейду на свой хост, и хост должен перенаправить меня на сайт.

Я хочу использовать только порт 80 или 443. И какой брандмауэр или прокси я могу использовать для перенаправления этого типа? Также, может быть, для этого будет достаточно использовать iptables, и я тоже думал о HAproxy?

Какие-либо предложения ? И спасибо.

Хорошо, ребята, я сделал то, что хочу, на хосте, я использовал iptables, и я отбрасываю весь трафик с 80 до 8080 и с 443 до 8443 для прокси nginx, а затем с прокси я отправляю его на правильный адрес. Связь между vm (прокси) и vm (сайт) всегда осуществляется через порт 80

Мне пришлось настроить сертификат на виртуальной машине, где находится прокси, и подписать его на правильный 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 не обременен, плюс механизм кеширования должен давать мне хорошую производительность в любом случае, я увижу через некоторое время.