| 模式 | 代表軟體 | 核心機制 |
|---|---|---|
| 同步 (阻塞) | Squid、Apache mod_proxy | 請求到達 → 立即建立後端連線 → 維持長連線直到傳輸結束 |
| 非同步 (事件驅動) | Nginx、Lighttpd | 請求到達 → 先完整接收請求 (Header/Body) → 再連線後端 → 串流回應 |

Client → [建立連線] → Proxy → [建立連線] → Backend
↑ ↓
←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←
全程維持雙向長連線,Backend 佔用連線槽 = 傳輸總耗時
Phase 1: Client → Nginx (接收完整請求,含大檔上傳)
Nginx 以高效事件循環處理,不佔用 Backend 連線
Phase 2: Nginx → Backend (高速內網轉發,毫秒級完成)
Backend 僅佔用極短連線時間
Phase 3: Backend → Nginx → Client (串流回應,邊收邊送)
proxy_buffering off 可強制)用戶上傳 100MB 檔案,上傳頻寬 1Mbps → 需 13 分鐘
Squid: 後端連線佔用 13 分鐘
Nginx: 後端連線佔用 < 1 秒 (內網 GB 級轉發)
proxy_next_upstream 重試下一台 → 請求成功率趨近 100%client_max_body_size 20m; 在 Nginx 層攔截| 問題 | 影響 | 解決方案 |
|---|---|---|
| 上傳進度條失效 | 後端無法即時得知上傳進度 | Nginx Upload Progress Module (第三方) 或 Nginx Plus 官方模組 |
| 請求體緩衝佔用磁碟 | 大檔上傳可能填滿 /tmp | client_body_temp_path 指定大分區、client_body_in_file_only on |
| WebSocket/長連線支援 | 早期版本需額外配置 | Nginx 1.3.13+ 原生支援 proxy_http_version 1.1; proxy_set_header Upgrade... |