前言
懶懶一直是自建網盤的使用者,目前以Cloudreve網盤作為主力使用,而Nextcloud作為備用網盤使用!
但前一陣子想傳輸大檔案(檔案大小超過100MB)時,卻發現兩種網盤(綁定同種域名下)雙雙出現Cloudflare返回502(Bad Gateway)錯誤!
排查分析
(1).懷疑原因:NGINX設定錯誤
因懶懶將Nextcloud架在VPS上頭,且為求使用方便故部屬在公網上,為保護原IP地址所以使用NGINX反代域名使用,而域名通過Cloudflare Proxy,原本單純以為沒設定NGINX設定檔的client_max_body_size
而已
server {
.........
location / {
....
client_max_body_size 10G;
....
}
.........
}
後來發現完全不對,因為我的Cloudreve網盤也是放在公網,然後使用域名進行訪問,但我Cloudreve網盤是使用Cloudflare Tunnel作內網穿透,壓根沒使用NGINX啊!
(2).懷疑原因:CloudFlare 免費版限制
經了解CloudFlare免費版有 upload size (HTTP POST request size) 100MB限制,但經懶懶爬文Cloudreve及Nextcloud皆有支援分片(分塊)上傳(chunked upload)的功能,但經懶懶在上傳途中觀察,每當第一個分片上傳完成就會卡住,無論每個分片大小是50MB或是100MB,問題依舊沒解決。
Cloudflare Zero Trust - account-limits
https://developers.cloudflare.com/cloudflare-one/account-limits/
Cloudflare Cache - Customization options and limitations
https://developers.cloudflare.com/cache/about/default-cache-behavior/
Cloudflare Workers - Request limits - (413) Request entity too large
(3).懷疑原因:CloudFlare 緩存問題
經爬文後發現有網友說只要域名不經過Cloudflare Proxy(即DNS only),直接直連就能解決問題,但這樣就享受不到Cloudflare提供的防護了!(翻桌
後來懶懶想到之前有設定Page Rules讓Cloudreve Bypass掉緩存(因為使用CDN有BUG,會讓手機端登入頁面不斷刷新),那時上傳功能一切正常,但礙於免費版的Page Rules只能設定3個,所以不久後即將該設定移除,然後在移除後就發生上傳大檔案失敗的問題。
所以懶懶將Page Rules設定回去後順利解決大檔案上傳問題。
簡易設定教學
- 登入你的Cloudflare帳號,導覽至Page Rules頁面建立規則
- 新增yourdomain.com/* 設定Cache Level為Bypass,然後保存
- 切換至Cache Rules頁面建立規則
- 依圖片範例新增yourdomain.com/* 設定Cache Status為Bypass cache,然後保存
- 實測輕鬆上傳6.3GB的mp4檔
- 設定完Ping域名返回CF的IP