You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将短主机名重定向至子域名(HAProxy配置)

解决HAProxy短主机名到FQDN的重定向问题

要实现短主机名(如server1)到完整FQDN(如server1.internal.mydomain.com)的重定向,同时保留HTTPS升级功能,你可以利用HAProxy的请求头变量和ACL组合完成字符串拼接,以下是具体方案:

核心配置修正

你的is_internal ACL逻辑是正确的,但重定向语句需要使用HAProxy内置的req.hdr(host)变量获取原始请求的主机头,再拼接成目标FQDN。同时要注意规则顺序,优先处理短域名转FQDN的逻辑,避免出现多次重定向。

替换重定向规则

将你写的:

http_request redirect location https://ORIGINALHOST.internal.mydomain.com if !is_internal

替换为:

# 对非内部FQDN的请求,重定向到带完整域名的HTTPS地址
http-request redirect location https://%[req.hdr(host),lower].internal.mydomain.com code 301 if !is_internal
  • %[req.hdr(host)]:获取原始请求的Host头内容(即短主机名,如server1)
  • ,lower:可选,将主机名转为小写,保持格式一致性
  • code 301:使用永久重定向,利于浏览器缓存优化

优化规则顺序

将短域名重定向规则放在HTTP转HTTPS规则之前,若希望一次性完成两个转换,也可以合并成一条规则:

# 同时处理HTTP转HTTPS和短域名转FQDN
http-request redirect location https://%[req.hdr(host),lower].internal.mydomain.com code 301 if !is_internal or !{ ssl_fc }

分开写则更清晰,便于后续维护调整。

完整修正后的配置

defaults
        mode http
        timeout client 10s
        timeout connect 5s
        timeout server 10s
        timeout http-request 10s

frontend mydomain_frontend
        # Listen for both http and https requests
        bind *:80
        bind *:443 ssl crt /etc/ssl/certs/Wildcard_mydomain_web_server.pem
        # Setup conditional ACLs for hosts
        acl server1_hosts hdr_beg(host) -i server1. server1 server1-2. server1-2
        acl server2_hosts hdr_beg(host) -i server2. server2 server2-2. server2-2
        
        # Setup Conditional ACLs for redirecting short/host names to FQDNs
        acl is_internal hdr_sub(host) -i internal.mydomain.com

        # 优先处理短域名转FQDN的重定向
        http-request redirect location https://%[req.hdr(host),lower].internal.mydomain.com code 301 if !is_internal

        # 处理HTTP到HTTPS的升级(仅针对已使用FQDN但用HTTP访问的情况)
        http-request redirect scheme https code 301 if !{ ssl_fc } and is_internal

        use_backend server1_bend if server1_hosts
        use_backend server2_bend if server2_hosts
        default_backend server1_bend

# Setup DNS resolution
resolvers default
        nameserver ns1 10.10.10.1:53
        nameserver ns2 10.10.10.15:53

backend server1_bend
        mode http
        option forwardfor if-none
        server site server1.internal.mydomain.com:80 check resolvers default

backend server2_bend
        mode http
        option forwardfor if-none
        server site server2.internal.mydomain.com:80 check resolvers default

关键注意事项

  • 确保你的通配符证书Wildcard_mydomain_web_server.pem覆盖*.internal.mydomain.com,否则HTTPS会出现证书验证错误
  • hdr_sub(host) -i internal.mydomain.com会匹配所有包含该后缀的主机头,比如server1.internal.mydomain.com或server2.internal.mydomain.com
  • 测试阶段可将301改为302临时重定向,便于调试修改

内容的提问来源于stack exchange,提问作者Mark Carpenter Jr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:16:02