如何configurationHAProxy作为反向代理?

我有多个Web服务器,托pipe多个域。 偶尔,我需要将一个域名从一个networking服务器移到另一个。 而不是必须更新域指向新的服务器位置的DNS,我想设置所有域指向一个反向代理(?),然后将Web请求传递到正确的服务器。 我正在尝试使用haproxy来实现这一点,没有太多的成功。

举个例子:

有两个服务器,web1.foo.com和web2.foo.com。 web1为abc.com和def.com服务网站。 web2为cba.com和fed.com提供网站服务。

还有一个代理服务器proxy.foo.com。

abc.com的dns等指向proxy.foo.com,它被configuration为将域映射到服务器,如下所示:

abc.com – > web1.foo.com def.com – > web1.foo.com cba.com – > web2.foo.com fed.com – > web2.foo.com

问题是,我不能得到它使用haproxy工作…它试图负载平衡,而不是反向代理…如果我去abc.com,它将循环之间的web1和web2。

所以,我想我想知道,这是甚至可能与haproxy,如果是的话,我在哪里出错的configuration? 我的configuration如下所示:

global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon # Default SSL material locations ca-base /etc/ssl/certs crt-base /etc/ssl/private # Default ciphers to use on SSL-enabled listening sockets. # For more information, see ciphers(1SSL). This list is from: # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS ssl-default-bind-options no-sslv3 defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http frontend localhost bind *:80 bind *:443 option tcplog mode tcp default_backend servers backend servers mode tcp server abc.com web1.foo.com server def.com web1.foo.com server cba.com web2.foo.com server fed.com web2.foo.com 

是的,您configuration的方式将实质上负载平衡后端服务器之间的所有传入连接。

你想要的基本上是每个真正的Web服务器的后端定义。 我认为你想要的是多个后端定义,每个真正的Web服务器的定义。 然后在你的前端部分,你想要使用各种条件来使用相关的后端,无论哪个前端URL被请求。 伪configuration可能看起来像这样:

 frontend localhost mode http use_backend web1 if { hdr(host) -i abc.com } use_backend web1 if { hdr(host) -i def.com } use_backend web2 if { hdr(host) -i cba.com } use_backend web2 if { hdr(host) -i fed.com } backend web1 server web1 web1.foo.com backend web2 server web2 web2.foo.com 

注意mode http 。 我相信实际上需要做一些事情,比如根据HTTP头做出决定。

当需要移动哪些URL到后端时,只需更新configuration文件并轻轻地重新加载haproxy即可。