概述
與 Cloudflare 集成時(shí),在網(wǎng)站的主機(jī)環(huán)境中使用 Load Balancer 時(shí),請(qǐng)考慮以下使用技巧:
Cloudflare 的 DNS Load Balancing
HTTP keep-alive
會(huì)話 Cookie
Railgun
DNS Load Balancing
Cloudflare 的 Load Balancing 功能支持基于 DNS 的負(fù)載均衡,并會(huì)對(duì)您的源站進(jìn)行運(yùn)行狀況檢查。它在 Cloudflare 的現(xiàn)有 Anycast DNS 網(wǎng)絡(luò)上進(jìn)行了擴(kuò)展,以提供無(wú)懼于 DDoS 的故障轉(zhuǎn)移(繞過(guò)不健康的源站)和地理轉(zhuǎn)向(將用戶定向到特定的源站池)。
HTTP 保持連接(HTTP 持久連接)
由于 Cloudflare 代理了從邊緣網(wǎng)絡(luò)到站點(diǎn)源的客戶流量,Cloudflare 保持 keep-alive 連接以提升性能并降低請(qǐng)求交易中 TCP 重復(fù)連接的成本。
因此,我們強(qiáng)烈建議在 Load Balancer 上啟用 HTTP Keep-Alive 連接,并將 keep-alive 超時(shí)設(shè)置為至少 300 秒,以匹配 Cloudflare 的默認(rèn)設(shè)置。
這將避免過(guò)早重置 Cloudflare 代理的請(qǐng)求的連接,或 Load Balancer 出現(xiàn)超時(shí)。
會(huì)話 Cookie
如果使用 HTTP Cookie 追蹤并將用戶會(huì)話綁定到負(fù)載平衡器上的某個(gè)特定的應(yīng)用服務(wù)器,最好對(duì) Load Balancer 進(jìn)行配置,使之按 Cooke 標(biāo)頭解析 HTTP 請(qǐng)求,并將每個(gè)請(qǐng)求定向到正確的應(yīng)用服務(wù)器,即便由于 keep-alive,所有 HTTP 請(qǐng)求都共享的是同一個(gè) TCP 連接。
例如:F5 BIG-IP Load Balancer 將在 TCP 連接開(kāi)始時(shí)設(shè)置會(huì)話 Cookie(若不存在),然后忽略在同一 TCP 套接字上進(jìn)行的后續(xù) HTTP 請(qǐng)求中傳遞的所有 Cookie。由于 Cloudflare 將通過(guò)同一 TCP 連接發(fā)送多個(gè)不同的 HTTP 會(huì)話,因此這往往會(huì)破壞會(huì)話粘性。(基于 HTTP Cookie 的會(huì)話粘性)。
Railgun(WAN 優(yōu)化)
使用 Railgun 和 Load Balancer 時(shí),理想的設(shè)置是將 Railgun Listener 置于 Load Balancer 的前面。因?yàn)楹茈y為 Sender/Listener 之間持久的 TLS 連接平衡負(fù)載,理想的設(shè)置是將 Listener 放在前面,這樣 LB 即可正常處理 HTTP/S 連接。
由于 Railgun 用作 HTTP 反向代理,因此如果沒(méi)有 Railgun,則 Load Balancer 設(shè)置應(yīng)與已啟用的設(shè)置匹配(即應(yīng)啟用 HTTP 保持活動(dòng)連接并將其設(shè)置為 90 秒超時(shí))。
如果將 Railgun 放在 Load Balancer 的后面,此設(shè)置仍然可以正常作用,但是需要采取其他步驟以避免站點(diǎn)流量中斷:
配置 railgun-nat.conf 文件來(lái)設(shè)置 Railgun 將得到優(yōu)化的主機(jī)的內(nèi)部地址(以避免將請(qǐng)求向外循環(huán)到 Internet 并返回到 LB 以轉(zhuǎn)發(fā)到原點(diǎn)。)
確認(rèn)沒(méi)有防火墻規(guī)則會(huì)阻止偵聽(tīng)器與源站之間的通信量或限速。
確認(rèn)端口 2408 為打開(kāi)狀態(tài)并通過(guò) LB,且監(jiān)聽(tīng)器和發(fā)送器之間的 TLS 連接沒(méi)有受到任何阻礙。