rad*_*lon 6 reverse-proxy haproxy
我有多个网络服务器,托管多个域。有时,我需要将域从一台 Web 服务器移动到另一台。我不想更新域的 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,它被配置为将域映射到服务器,如下所示:
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 是否可以做到这一点?如果可以,我的配置哪里出了问题?我的配置如下所示:
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
Run Code Online (Sandbox Code Playgroud)
是的,您配置的方式本质上将负载平衡后端服务器之间的所有传入连接。
您想要的基本上是每个真实 Web 服务器的一个后端定义。我认为您想要的要点是多个后端定义,每个后端定义对应一个真实的 Web 服务器。然后,在前端部分,您需要使用各种条件来为所请求的前端 URL 使用关联的后端。伪配置可能看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
请注意mode http
. 我相信这是实际执行诸如基于 HTTP 标头做出决策之类的事情所必需的。
当需要将哪些 URL 移动到哪个后端时,只需更新配置文件并对 haproxy 进行软重新加载即可。
归档时间: |
|
查看次数: |
52035 次 |
最近记录: |