HAProxy,全稱為 "High Availability Proxy",是一款開(kāi)源的、高性能的負(fù)載均衡器和代理服務(wù)器。主要用于改善應(yīng)用程序的可用性、可靠性和性能。
與大眾熟知的Nginx相比各有優(yōu)缺點(diǎn),如果你需要的是一個(gè)Web服務(wù)器,還是首選Nginx,雖然HAProxy也能實(shí)現(xiàn)相同效果,但卻需要通過(guò)十分繁瑣的配置才能達(dá)到與Nginx相同的水平。
HAProxy最擅長(zhǎng)的還是負(fù)載均衡、限流、反向代理,在這些方向HAProxy的性能是明顯高于Nginx的。
最重要的是Nginx有一個(gè)致命的問(wèn)題就是作為反向代理服務(wù)器時(shí)有DNS緩存,并且即使配置了DNS緩存有效時(shí)間也不能生效,當(dāng)然也有可能是我的打開(kāi)方式不對(duì)。
下面是我使用HAProxy作為反向代理服務(wù)器的一個(gè)案例,可進(jìn)行參考。
1、運(yùn)行環(huán)境
操作系統(tǒng):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
。
先把配置文件的全部?jī)?nèi)容放出來(lái),下面對(duì)配置內(nèi)容進(jìn)行說(shuō)明:
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、全局參數(shù)
在 HAProxy 配置文件中,global
?部分用于設(shè)置全局參數(shù),這些參數(shù)會(huì)影響 HAProxy 的整體運(yùn)行方式。
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 的運(yùn)行環(huán)境隔離到指定的目錄,這樣攻擊者就無(wú)法訪問(wèn)運(yùn)行環(huán)境之外的文件系統(tǒng)了。
daemon
表示HAProxy 以守護(hù)后臺(tái)進(jìn)程模式運(yùn)行。
resolvers mydns ...
表示指定DNS服務(wù)器,并且DNS緩存最多保存120秒。
5、默認(rèn)參數(shù)
在 HAProxy 的配置中,defaults
?用于定義默認(rèn)設(shè)置。這部分的設(shè)置會(huì)應(yīng)用于配置文件中后續(xù)定義的所有?frontend
?和?backend
?部分,但可以被覆蓋。
defaults
????mode?http
????timeout?connect?5000ms
????timeout?client?50000ms
????timeout?server?50000ms
mode http
表示當(dāng)前工作模式為 HTTP 模式,用于HTTP 負(fù)載均衡器或 HTTP 反向代理。
timeout connect 5000ms
表示HAProxy 嘗試與后端服務(wù)器建立連接的最大等待時(shí)間。
timeout client 50000ms
表示客戶端與 HAProxy 之間的最大閑置連接時(shí)間。
timeout server 50000ms
表示HAProxy 與后端服務(wù)器之間的最大閑置連接時(shí)間。
6、前端部分
前端部分表示HAProxy 接收進(jìn)入連接的入口點(diǎn)。在前端部分定義如何處理進(jìn)入的客戶端請(qǐng)求。
bind?*:443?ssl?crt?/etc/haproxy/test.cn.pem
以上配置表示監(jiān)聽(tīng)443端口,并且指定了SSL證書(shū)。
acl?url_online?path_beg?/online
以上配置表示創(chuàng)建了一個(gè)名為url_online
的訪問(wèn)控制項(xiàng),用于檢查進(jìn)入請(qǐng)求的 URL 路徑是否以?/online
?開(kāi)頭。
use_backend?online_backend?if?url_online
以上配置表示如果滿足名為url_online
的訪問(wèn)控制項(xiàng)條件后將流量轉(zhuǎn)發(fā)到名為online_backend
的后端部分。
7、后端部分
后端部分表示HAProxy定義處理請(qǐng)求的服務(wù)器配置。
http-request?set-header?X-Real-IP?%[src]
以上配置表示將請(qǐng)求頭中的X-Real-IP
參數(shù)設(shè)置為請(qǐng)求的源IP地址。
http-request?set-path?%[path,regsub(^/online/,/)]
以上配置表示修改請(qǐng)求路徑內(nèi)容,將路徑中的/online/
替換為/
。原始請(qǐng)求路徑為?/online/example
,修改后的路徑將變?yōu)?/example
。
server?tworice?www.test.com:8002?check?resolvers?mydns?resolve-prefer?ipv4
以上配置定義了一個(gè)名為tworice
后臺(tái)服務(wù)器,服務(wù)器的地址為www.test.com:8002
;check
表示定期檢查該服務(wù)器的健康狀況;resolvers mydns
表示使用我們?cè)谌繀?shù)中設(shè)置的DNS解析器來(lái)解析該服務(wù)器域名;resolve-prefer ipv4
表示解析DNS時(shí)優(yōu)先使用IPv4地址。
8、SSL證書(shū)
配置文件中使用到的SSL證書(shū)用的是阿里云的免費(fèi)證書(shū),下載證書(shū)時(shí)候選擇Apache
服務(wù)器類型,如下圖所示。
下載SSL證書(shū)
下載完成后進(jìn)行解壓,解壓后會(huì)得到如下幾個(gè)文件:test.com_chain.crt
、test.com.key
、test.com_public.crt
。
使用如下命令生成HAProxy需要的密鑰文件:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-823085.html
cat?test.com_public.crt?test.com_chain.crt?test.com.key?>?/etc/haproxy/test.com.pem
命令中的文件路徑請(qǐng)根據(jù)自己的文件路徑調(diào)整。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-823085.html
到了這里,關(guān)于【開(kāi)發(fā)日記】換掉Nginx,使用HAProxy作為反向代理服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!