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