如何測試代理 Keep-Alive,又不破壞 IP 輪換
重用連線能讓經過代理的資料工作更快、更省成本,但也可能悄悄破壞「每條連線輪換出口」的設計、長期保留異常路徑,或讓新代理設定看似沒有生效——因為用戶端仍在使用舊連線。因此,真正需要回答的不是「要不要啟用 Keep-Alive」,而是「哪一種業務身分可以重用哪條連線、維持多久,以及用什麼證據證明行為正確」。
本指南適用於已獲授權的資料收集、市場研究、廣告驗證、在地化檢查與迴歸測試,可用於住宅代理、輪換代理、靜態住宅代理、HTTP(S) 與 SOCKS5 工作流程。

先拆開四種常被統稱為「工作階段」的物件
測試前必須準確命名每一層:
- 業務工作:一次搜尋、一段頁面旅程或一個驗證單元。
- 代理工作階段:由服務商憑證或工作階段標記指定的黏性出口。
- 傳輸連線:用戶端到代理閘道之間的 TCP 或 QUIC 連線。
- 目標連線:代理閘道到目標網站的連線,通常由服務商獨立管理。
應用程式可發出新請求,卻繼續重用同一條傳輸連線。「輪換」閘道可能按連線而非按請求選擇出口;黏性工作階段也可能在多次重連後繼續維持。混淆這些單位,輪換測試就無法解讀。
先寫下身分契約
發出請求前先明確規則,例如:
- 相互獨立的無狀態工作,在新建代理連線時應取得新出口;
- 同一個合規多步驟流程必須維持國家與出口身分一致;
- 無關使用者或工作不得共用 Cookie、代理工作階段標記或連線池;
- 修改代理設定後,不得繼續重用舊設定建立的連線。
日誌只使用去識別化標記,不保存代理密碼、Cookie、授權標頭或完整個人資料。
建立 2×2 對照實驗
對同一個獲准目標與相同負載執行四種模式:
| 模式 | 代理工作階段 | 用戶端連線池 | 驗證目的 |
|---|---|---|---|
| A | 輪換 | 關閉 | 建立新連線基準 |
| B | 輪換 | 開啟 | 判斷重用是否固定出口 |
| C | 黏性 | 關閉 | 判斷黏性是否跨重連維持 |
| D | 黏性 | 開啟 | 測量完整旅程的最佳有效效能 |
地區、目標、請求標頭、內容驗證、逾時與請求數量保持一致。每種模式至少完成 30 個請求,並在多個時段重複。一次短暫突發無法區分黏性策略與區域庫存不足。
收集連線層證據
每個請求只記錄必要欄位:
- 工作編號與去識別化工作階段標記;
- 是否重用了連線;
- 連線年齡與已承載請求數;
- 預期與實際地區;
- 去識別化出口指紋;
- 代理驗證結果;
- 建連、TLS、首位元組與總耗時;
- 回應類別與內容驗證結果;
- 傳輸位元組;
- 重試是否使用同一條連線。
只有狀態碼、內容、語系、地區、新鮮度與完整性都符合契約,才算有效結果。HTTP 200 不能單獨代表成功。
證明 Keep-Alive 是否改變輪換
同時按「請求」與「新建連線」統計不同出口。如果模式 A 能輪換,而模式 B 長時間停留在同一出口,輪換邊界很可能是傳輸連線。這不一定是缺陷,但代表連線池策略必須服從業務身分契約。
建議計算:
重用率 = 重用連線的請求數 / 完成請求數
每連線輪換率 = 不同出口數 / 新建代理連線數
有效吞吐 = 有效結果數 / 執行分鐘數
單一有效結果成本 = 傳輸成本 / 有效結果數
最佳模式應在符合身分契約的前提下,取得更低的 p95 延遲與單一有效結果成本,而非單純追求更多不同 IP。
主動暴露過期連線
閒置連線可能比閘道路由、NAT 對應、代理工作階段租期或中間設備逾時活得更久。典型症狀是閒置後第一次重用失敗,而新建連線立刻成功。可依序加入 15、30、60、120 秒的閒置間隔。
故障需要分層記錄:
- 尚未到達代理驗證就失敗;
- 代理明確拒絕驗證;
- 閒置後第一次寫入即被重設;
- 請求到達代理後逾時;
- 目標拒絕或限流;
- 狀態正常但內容錯誤或不完整。
如果失敗集中在閒置後首次重用,應縮短閒置壽命或在分配重要工作前驗證連線,而不是直接判定整個代理池失效。
限制連線池,而不是無限放大
分別設定活躍連線數、閒置連線數、連線最長年齡、單連線請求數與佇列最長等待時間。無界連線池會消耗檔案描述符,也讓舊設定更難排空。
安全設定通常包括:
- 每個目標使用獨立連線池,而非全域共用;
- 每個身分或黏性工作階段邊界使用獨立連線池;
- 最大閒置時間低於實測的過期連線轉折點;
- 設定最長連線年齡,讓 DNS 與設定變更最終生效;
- 使用有界佇列,在飽和前延遲或拒絕新工作;
- 連線層故障只在嚴格預算內以新連線重試。
不要在同一條異常連線上重試所有錯誤,也不要無上限地為每次重試新建連線,否則短暫故障會被放大成建連風暴。
用排空測試驗證設定切換
更換代理端點、憑證、地區或輪換模式時,先停止讓舊連線池接納新工作,讓可安全完成的進行中工作結束,關閉閒置連線,再建立新的用戶端或傳輸連線池。確認新連線確實經過預期代理路徑後,再逐步增加流量。
這項測試也能發現直連洩漏:強制代理失敗時,工作必須安全失敗,不能靜默重用直連連線或回退至裝置網路。
上線驗收門檻
候選設定至少應符合:
- 出口行為符合書面身分契約;
- 無關工作之間沒有 Cookie 或工作階段狀態混用;
- 首次請求有效率達到服務目標;
- p95 延遲改善且錯誤內容沒有增加;
- 過期連線故障不超過錯誤預算;
- 故障期間重試不會增加總輸入負載;
- 排空後代理設定能可靠切換;
- 直連洩漏維持為零;
- 單一有效結果成本下降或有明確收益支撐。
先以小流量金絲雀上線,並保留原連線池設定以便回復。
檢查清單
- 明確定義請求、連線、代理工作階段與工作邊界。
- 對輪換與黏性模式分別測試連線池開與關。
- 驗證內容,而不只檢查狀態碼。
- 按新建連線統計出口變化。
- 加入受控閒置間隔暴露過期連線。
- 分開記錄連線故障與目標故障。
- 限制閒置數、連線年齡、單連線請求數與佇列年齡。
- 代理設定變更後排空舊連線池。
- 僅在嚴格預算內用新連線重試安全請求。
- 不在日誌中保存憑證與使用者資料。
常見問題
Keep-Alive 一定會阻止代理輪換嗎?
不一定,行為取決於服務商與協定。有些閘道按連線輪換,有些依賴代理工作階段標記,也有其他策略。必須實測目前方案與用戶端組合。
輪換住宅代理是否應每個請求都新建連線?
只有當請求彼此獨立,而且身分契約確實要求新出口時才需要。多步驟流程通常需要連續性,過度重連會增加握手、延遲與故障機會。
新出口是否證明舊出口品質差?
不能。出口變化只證明路由改變。品質判斷必須結合有效結果、延遲、地區準確度與成本。
過期連線失敗後應如何重試?
只重試安全且具冪等性的工作,使用新連線、加入抖動並設定嚴格預算。非冪等操作不得自動重放。
合規說明
僅在已獲授權的系統與資料範圍內使用代理與自動化。遵守目標條款、存取規則、速率限制、隱私義務、地區法律與資料保留要求。不得利用連線重用或 IP 輪換規避控制。