【开发日记】换掉Nginx,使用HAProxy作为反向代理服务器

HAProxy,全称为 "High Availability Proxy",是一款开源的、高性能的负载均衡器和代理服务器。主要用于改善应用程序的可用性、可靠性和性能。

与大众熟知的Nginx相比各有优缺点,如果你需要的是一个Web服务器,还是首选Nginx,虽然HAProxy也能实现相同效果,但却需要通过十分繁琐的配置才能达到与Nginx相同的水平。

HAProxy最擅长的还是负载均衡、限流、反向代理,在这些方向HAProxy的性能是明显高于Nginx的。

最重要的是Nginx有一个致命的问题就是作为反向代理服务器时有DNS缓存,并且即使配置了DNS缓存有效时间也不能生效,当然也有可能是我的打开方式不对。

下面是我使用HAProxy作为反向代理服务器的一个案例,可进行参考。

1、运行环境

操作系统:Ubuntu 20.04

HAProxy版本:HAProxy 2.6.16

2、安装HAProxy

sudo apt-get update
sudo apt-get install haproxy

3、配置文件

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

4、全局参数

在 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秒。

5、默认参数

在 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 与后端服务器之间的最大闲置连接时间。

6、前端部分

前端部分表示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的后端部分。

7、后端部分

后端部分表示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:8002check表示定期检查该服务器的健康状况;resolvers mydns表示使用我们在全部参数中设置的DNS解析器来解析该服务器域名;resolve-prefer ipv4表示解析DNS时优先使用IPv4地址。

8、SSL证书

配置文件中使用到的SSL证书用的是阿里云的免费证书,下载证书时候选择Apache服务器类型,如下图所示。

图片

下载SSL证书

下载完成后进行解压,解压后会得到如下几个文件:test.com_chain.crttest.com.keytest.com_public.crt

使用如下命令生成HAProxy需要的密钥文件:

cat test.com_public.crt test.com_chain.crt test.com.key > /etc/haproxy/test.com.pem

命令中的文件路径请根据自己的文件路径调整。

  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值