阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

HAProxy匹配泛解析域名排错过程分享

213次阅读
没有评论

共计 2344 个字符,预计需要花费 6 分钟才能阅读完成。

一 故障描述
HAProxy 已经搭建完毕,现在需要把以后缀为 game.linuxidc.com 的域名转发到后端的 Nginx 虚拟机主机上,所以关键在于怎么使用 HAProxy 匹配 game.linuxidc.com。在 HAProxy 的配置文件中设置将 HTTP 请求转发到后端 Nginx 主机的 80 端口,通过 88 端口检测 Nginx 和 PHP-FPM 的监控状态。

通过设置 HAProxy ACL 规则
acl game_url      hdr_end(host) -i  game.linuxidc.com

然后 reload HAProxy 后,通过浏览器访问始终报 404 错误

如在浏览器访问 router-taiwan.game.linuxidc.com/index.php,通过在后端 Nginx 的 log 日志上查看对应域名的日志输出没有任何显示,只有 Nginx 默认的访问日志有日志。说明这个域名 HAProxy 根本没有转发过来。于是怀疑是 HAProxy 的 ACL 规则写错了。

二 排错过程
1. 查 HAProxy ACL 匹配规则的资料,怀疑是 ACL 规则设置有问题
将 acl 一栏注释掉,不设置特定 acl 规则,设置默认转发

1  default_backend game_pool

这样所有的域名请求都会默认转发到 game_pool 指定的 Nginx 主机,再查看 Nginx 访问日志,仍然没有特定域名的范围日志,而只有 Nginx 的默认访问日志。所以排除是 ACL 转发规则的问题。

2. 检查 HAProxy 对后端 Nginx 主机的监控检查机制。
在 HAProxy 中设置的是通过检测后端 Nginx 主机的 php-fpm_status 的状态来判断后端 Nginx 主机上的 Nginx 和 PHP-FPM 的健康状态的。因为只判断 Nginx 或只判断 PHP-FPM 是不能判断后端 Nginx 主机可用的。
nginx_php-fpm_status.conf

server {
 
          listen      88;
 
          location /nginx_status {
            stub_status on;
            access_log off;
#            allow 127.0.0.1;
#            allow 10.4.1.125;
#            deny all;
                                  }       
           
          location /php-fpm_status {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
                                    }
 
        }

 

# curl 192.168.100.63:88/php-fpm_status
pool:                www
process manager:      dynamic
start time:          11/Feb/2015:16:00:27 +0800
start since:          2703
accepted conn:        1367
listen queue:        0
max listen queue:    0
listen queue len:    128
idle processes:      19
active processes:    1
total processes:      20
max active processes: 1
max children reached: 0
slow requests:        0

在 HAProxy 中设置有

option httpchk  GET /php-fpm_status 
server  linuxidc-taiwan-game1  192.168.100.63:80    check  maxconn 2000

这里发现了问题,由于设置 HAProxy 是通过请求 /php-fpm_status 去判断健康状态的,但是这个 URL 需要使用 88 端口访问,这里使用 check 参数默认会根据 192.168.100.63:80 设置的 80 端口去检测。

重新设置检测端口为 88
server  linuxidc-taiwan-game1  192.168.100.63:80    check port 88  maxconn 2000

然后 reload 一下 HAProxy,通过浏览器访问 router-taiwan.linuxidc.com/index.php 就可以正常访问了。

Haproxy+Keepalived 搭建 Weblogic 高可用负载均衡集群 http://www.linuxidc.com/Linux/2013-09/89732.htm

Keepalived+HAProxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm

CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm

Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm

Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm

使用 HAProxy 配置 HTTP 负载均衡器 http://www.linuxidc.com/Linux/2015-01/112487.htm

HAproxy 的详细介绍:请点这里
HAproxy 的下载地址:请点这里

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计2344字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中