如何通过HAProxy为站点新增静态页面并解决访问404报错
HAProxy配置静态访问页面解决方案
现有配置问题排查
当前配置不生效主要有4个核心问题:
- ACL匹配顺序错误:
frontend配置中先判断了域名匹配规则,所有sky.example.com的请求会直接转发到业务后端,后续的/testing路径规则根本不会触发 - 后端逻辑冲突:同一个
backend missmay同时配置了业务转发节点和静态页返回规则,静态页配置不会生效 - 基础配置存在语法错误:
global段的maxconn 8000de here是无效配置,log /var/log loca2 err中的loca2应为local2 - 业务端口非法:配置中业务节点端口
78222超出TCP合法端口范围(最大为65535),需要修正为实际业务端口
调整后的配置方案
1. 修正配置内容
global log /var/log local2 err chroot /var/lib/haproxy user haproxy group haproxy daemon tune.ssl.default-dh-param 1024 maxconn 8000 defaults mode http log global balance static-rr option httplog timeout server 300s timeout client 300s timeout connect 5s timeout queue 60s retries 3 timeout http-request 60s maxconn 8000 frontend skying bind *:443 ssl crt /etc/haproxy/ssl/testing.pem option forwardfor acl modelx hdr(host) -i sky.example.com # 路径规则优先级高于普通域名转发,先匹配静态页路径 acl is_info_testing path /testing use_backend static_testing if modelx is_info_testing # 其余普通请求走原有业务后端 use_backend missmay if modelx # 新增独立静态页后端,无业务转发节点 backend static_testing mode http errorfile 200 /etc/haproxy/static/testing.html backend missmay mode http server test1_node1 192.168.1.25:7822 check cookie test1_node1 server test1_node2 192.168.1.26:7822 check cookie test1_node2
2. 额外注意事项
- 如果你保留了
chroot /var/lib/haproxy配置,需要将静态文件放在chroot目录对应的路径下:即/var/lib/haproxy/etc/haproxy/static/testing.html,或者将errorfile路径修改为相对于chroot的路径 - 确保
testing.html文件权限为haproxy用户可读 - 当前路径规则为精确匹配
/testing,如果需要匹配/testing下的所有子路径,可以将ACL规则改为acl is_info_testing path_beg /testing - 配置修改完成后先执行语法检查:
haproxy -c -f /etc/haproxy/haproxy.cfg,确认无报错后再重启HAProxy服务生效
内容的提问来源于stack exchange,提问作者skydriver
相关产品推荐
相关产品推荐

