前言


懶懶一直是自建網盤的使用者,目前以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官方說明文件

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

https://developers.cloudflare.com/workers/platform/limits/

(3).懷疑原因:CloudFlare 緩存問題


經爬文後發現有網友說只要域名不經過Cloudflare Proxy(即DNS only),直接直連就能解決問題,但這樣就享受不到Cloudflare提供的防護了!(翻桌

Cloudflare Proxy狀態

後來懶懶想到之前有設定Page Rules讓Cloudreve Bypass掉緩存(因為使用CDN有BUG,會讓手機端登入頁面不斷刷新),那時上傳功能一切正常,但礙於免費版的Page Rules只能設定3個,所以不久後即將該設定移除,然後在移除後就發生上傳大檔案失敗的問題。

所以懶懶將Page Rules設定回去後順利解決大檔案上傳問題。

簡易設定教學


  1. 登入你的Cloudflare帳號,導覽至Page Rules頁面建立規則
登入你的Cloudflare帳號,導覽至Page Rules頁面建立規則
  1. 新增yourdomain.com/* 設定Cache Level為Bypass,然後保存
新增yourdomain.com/* 設定Cache Level為Bypass,然後保存
  1. 切換至Cache Rules頁面建立規則
切換至Cache Rules頁面建立規則
  1. 依圖片範例新增yourdomain.com/* 設定Cache Status為Bypass cache,然後保存
依圖片範例新增yourdomain.com/* 設定Cache Status為Bypass cache,然後保存
  1. 實測輕鬆上傳6.3GB的mp4檔
實測輕鬆上傳6.3GB的mp4檔
  1. 設定完Ping域名返回CF的IP
設定完Ping域名返回CF的IP
注意事項
注意:若經過WebDAV上傳還是可能會出錯

補充說明


說明
在設置Page Rules後,懶懶發現先前使用Nextcloud及Cloudreve播放影片時,無法快轉的問題也一起解決囉!!