赞
踩
HAProxy,全称为 "High Availability Proxy",是一款开源的、高性能的负载均衡器和代理服务器。主要用于改善应用程序的可用性、可靠性和性能。
与大众熟知的Nginx相比各有优缺点,如果你需要的是一个Web服务器,还是首选Nginx,虽然HAProxy也能实现相同效果,但却需要通过十分繁琐的配置才能达到与Nginx相同的水平。
HAProxy最擅长的还是负载均衡、限流、反向代理,在这些方向HAProxy的性能是明显高于Nginx的。
最重要的是Nginx有一个致命的问题就是作为反向代理服务器时有DNS缓存,并且即使配置了DNS缓存有效时间也不能生效,当然也有可能是我的打开方式不对。
下面是我使用HAProxy作为反向代理服务器的一个案例,可进行参考。
操作系统:Ubuntu 20.04
HAProxy版本:HAProxy 2.6.16
- sudo apt-get update
- sudo apt-get install haproxy
HAProxy的配置文件路径位于/etc/haproxy/haproxy.cfg
。
先把配置文件的全部内容放出来,下面对配置内容进行说明:
- global
- chroot /var/lib/haproxy
- daemon
- resolvers mydns
- nameserver dns1 223.5.5.5:53
- nameserver dns2 114.114.114.114:53
- hold valid 120s
-
- defaults
- log global
- mode http
- option httplog
- timeout connect 5000ms
- timeout client 50000ms
- timeout server 50000ms
-
- frontend https_front
- bind *:443 ssl crt /etc/haproxy/test.cn.pem
- acl url_online path_beg /online
- use_backend online_backend if url_online
-
- frontend http_front
- bind *:80
- acl url_online path_beg /online
- use_backend online_backend if url_online
-
- backend online_backend
- http-request set-header X-Real-IP %[src]
- http-request set-path %[path,regsub(^/online/,/)]
- server tworice www.test.com:8002 check resolvers mydns resolve-prefer ipv4
在 HAProxy 配置文件中,global
部分用于设置全局参数,这些参数会影响 HAProxy 的整体运行方式。
- global
- chroot /var/lib/haproxy
- daemon
- resolvers mydns
- nameserver dns1 223.5.5.5:53
- nameserver dns2 114.114.114.114:53
- hold valid 120s
在如上配置中,chroot /var/lib/haproxy
表示将HAProxy 的运行环境隔离到指定的目录,这样攻击者就无法访问运行环境之外的文件系统了。
daemon
表示HAProxy 以守护后台进程模式运行。
resolvers mydns ...
表示指定DNS服务器,并且DNS缓存最多保存120秒。
在 HAProxy 的配置中,defaults
用于定义默认设置。这部分的设置会应用于配置文件中后续定义的所有 frontend
和 backend
部分,但可以被覆盖。
- defaults
- mode http
- timeout connect 5000ms
- timeout client 50000ms
- timeout server 50000ms
mode http
表示当前工作模式为 HTTP 模式,用于HTTP 负载均衡器或 HTTP 反向代理。
timeout connect 5000ms
表示HAProxy 尝试与后端服务器建立连接的最大等待时间。
timeout client 50000ms
表示客户端与 HAProxy 之间的最大闲置连接时间。
timeout server 50000ms
表示HAProxy 与后端服务器之间的最大闲置连接时间。
前端部分表示HAProxy 接收进入连接的入口点。在前端部分定义如何处理进入的客户端请求。
bind *:443 ssl crt /etc/haproxy/test.cn.pem
以上配置表示监听443端口,并且指定了SSL证书。
acl url_online path_beg /online
以上配置表示创建了一个名为url_online
的访问控制项,用于检查进入请求的 URL 路径是否以 /online
开头。
use_backend online_backend if url_online
以上配置表示如果满足名为url_online
的访问控制项条件后将流量转发到名为online_backend
的后端部分。
后端部分表示HAProxy定义处理请求的服务器配置。
http-request set-header X-Real-IP %[src]
以上配置表示将请求头中的X-Real-IP
参数设置为请求的源IP地址。
http-request set-path %[path,regsub(^/online/,/)]
以上配置表示修改请求路径内容,将路径中的/online/
替换为/
。原始请求路径为 /online/example
,修改后的路径将变为 /example
。
server tworice www.test.com:8002 check resolvers mydns resolve-prefer ipv4
以上配置定义了一个名为tworice
后台服务器,服务器的地址为www.test.com:8002
;check
表示定期检查该服务器的健康状况;resolvers mydns
表示使用我们在全部参数中设置的DNS解析器来解析该服务器域名;resolve-prefer ipv4
表示解析DNS时优先使用IPv4地址。
配置文件中使用到的SSL证书用的是阿里云的免费证书,下载证书时候选择Apache
服务器类型,如下图所示。
下载SSL证书
下载完成后进行解压,解压后会得到如下几个文件:test.com_chain.crt
、test.com.key
、test.com_public.crt
。
使用如下命令生成HAProxy需要的密钥文件:
cat test.com_public.crt test.com_chain.crt test.com.key > /etc/haproxy/test.com.pem
命令中的文件路径请根据自己的文件路径调整。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。