当前位置:   article > 正文

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

反向代理haproxy 与nginx

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

  1. sudo apt-get update
  2. sudo apt-get install haproxy

3、配置文件

HAProxy的配置文件路径位于/etc/haproxy/haproxy.cfg

先把配置文件的全部内容放出来,下面对配置内容进行说明:

  1. global
  2.     chroot /var/lib/haproxy
  3.     daemon
  4.     resolvers mydns
  5.         nameserver dns1 223.5.5.5:53
  6.         nameserver dns2 114.114.114.114:53
  7.         hold valid 120s
  8.  
  9. defaults
  10.     log global
  11.     mode http
  12.     option httplog
  13.     timeout connect 5000ms
  14.     timeout client 50000ms
  15.     timeout server 50000ms
  16. frontend https_front
  17.     bind *:443 ssl crt /etc/haproxy/test.cn.pem
  18.     acl url_online path_beg /online
  19.     use_backend online_backend if url_online
  20. frontend http_front
  21.     bind *:80
  22.     acl url_online path_beg /online
  23.     use_backend online_backend if url_online
  24. backend online_backend
  25.     http-request set-header X-Real-IP %[src]
  26.     http-request set-path %[path,regsub(^/online/,/)]
  27.     server tworice www.test.com:8002 check resolvers mydns resolve-prefer ipv4

4、全局参数

在 HAProxy 配置文件中,global 部分用于设置全局参数,这些参数会影响 HAProxy 的整体运行方式。

  1. global
  2.     chroot /var/lib/haproxy
  3.     daemon
  4.     resolvers mydns
  5.         nameserver dns1 223.5.5.5:53
  6.         nameserver dns2 114.114.114.114:53
  7.         hold valid 120s

在如上配置中,chroot /var/lib/haproxy表示将HAProxy 的运行环境隔离到指定的目录,这样攻击者就无法访问运行环境之外的文件系统了。

daemon表示HAProxy 以守护后台进程模式运行。

resolvers mydns ...表示指定DNS服务器,并且DNS缓存最多保存120秒。

5、默认参数

在 HAProxy 的配置中,defaults 用于定义默认设置。这部分的设置会应用于配置文件中后续定义的所有 frontend 和 backend 部分,但可以被覆盖。

  1. defaults
  2.     mode http
  3.     timeout connect 5000ms
  4.     timeout client 50000ms
  5.     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

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号