HAproxy四层代理,匹配不同的域名给不同的ip。
例如匹配sgs.prod.com域名给ip192.168.1.12
匹配sgssf.prod.com域名给ip192.168.2.11。代理的是emqx:1883端口
请给出详细的配置文件和说明
HAproxy四层代理,匹配不同的域名给不同的ip。
例如匹配sgs.prod.com域名给ip192.168.1.12
匹配sgssf.prod.com域名给ip192.168.2.11。代理的是emqx:1883端口
请给出详细的配置文件和说明
引自免费微信小程序:皆我百晓生
在HAProxy中,四层(TCP)代理的配置通常不直接处理域名,而是基于源IP地址、端口号或其他连接信息进行转发。不过,通过一些技巧,我们可以实现根据域名进行转发的功能。这通常涉及到使用haproxy的HTTP检查模块(http-request),结合后端服务器的URL重写功能。这里是一个基本的示例配置,它将根据请求头中的Host字段来决定转发到哪个后端服务器。
首先,确保你的HAProxy支持HTTP检查模块,这通常在默认安装中已经包含。如果没有,你需要重新编译或安装带有--with-http
选项的HAProxy。
然后,创建一个名为haproxy.cfg
的配置文件,并添加以下内容:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
user haproxy
group haproxy
daemon
defaults
log global
mode tcp
option clitcpka
retries 3
timeout connect 5000
timeout client 50000
timeout server 50000
frontend ft_prod_com
bind *:443 ssl crt /path/to/your/cert.pem
mode tcp
option httplog
default_backend be_prod_com
backend be_prod_com
balance roundrobin
option forwardfor
server sgs_prod com ip192.168.1.12:1883 check
server sgs_ssf_prod_com ip192.168.2.11:1883 check
这个配置做了以下事情:
ft_prod_com
,监听所有IP的443端口,并且启用SSL。你需要替换/path/to/your/cert.pem
为你的证书路径。mode tcp
指定这是四层代理。option httplog
使得HAProxy记录HTTP日志,尽管这是一个四层代理,但这样可以更容易地查看请求头。be_prod_com
。后端服务器池be_prod_com
:
balance roundrobin
设置负载均衡策略为轮询。option forwardfor
保留原始客户端IP地址。sgs.prod.com
和sgssf.prod.com
。这些服务器应该在你的应用服务器上运行Emqx,并且配置好URL重写规则,以便根据请求的Host头来正确处理连接到1883端口的 MQTT 请求。注意:为了使此配置生效,你的应用服务器(运行Emqx的服务器)必须能解析Host头并根据它来决定如何处理连接。这可能需要在Emqx之外的其他软件(例如Nginx或Apache)中进行配置,或者如果你的Emqx版本支持,可以直接在Emqx内部配置。然而,Emqx本身并不直接支持根据Host头转发连接,因此这种方法可能不是最佳实践。一种更好的方法可能是使用七层(HTTP)代理,但是在这个场景下,你可能需要先将MQTT流量转换为HTTP明文或WebSockets,然后再由HAProxy转发。
要启动HAProxy,执行以下命令:
sudo haproxy -f /etc/haproxy/haproxy.cfg
请根据实际情况修改配置文件路径。如果HAProxy已经启动,你可能需要先停止它再重启,以应用新的配置。同时,别忘了根据实际环境调整证书路径和其他细节。