我正在尝试设置 haproxy 以根据 http 请求中使用的子域路由到后端。例如,我有一个在端口 8000 上运行的常规 Web 服务器和一个在相同 IP 地址的端口 8001 上运行的等待 websocket 连接的应用程序服务器。我现在希望,如果用户点击 app.mydomain.com:80,他将被重定向到端口 8001,如果他点击 www.mydomain.com(或任何其他子域),他将被重定向到端口 8000 上的 Web 服务器。
我想出了一个我认为应该可以实现这一点的简单配置(它大致基于这个问题):
frontend all 0.0.0.0:80
timeout client 86400000
acl aclMS1 hdr_dom(host) -i app
use_backend beMS1 if aclMS1
default_backend beWEB
backend beMS1
timeout server 86400000
server srvMS1 localhost:8001 maxconn 200 check
backend beWEB
server webserver localhost:8000 maxconn 200 check
但是,这似乎不起作用。我总是在端口 8000 上找到我的 Web 服务器。我做错了什么?
答案1
我搞清楚了如何让它工作。我缺少模式 http 选项。我的配置现在看起来像这样,并且运行良好:
defaults
mode http
timeout server 50000ms
timeout server 50000ms
timeout server 50000ms
frontend all 0.0.0.0:80
timeout client 86400000
acl aclMS1 hdr_dom(host) -i app
use_backend beMS1 if aclMS1
default_backend beWEB
backend beMS1
timeout server 86400000
server srvMS1 localhost:8001 maxconn 200 check
backend beWEB
server webserver localhost:8000 maxconn 200 check