Nextcloud 上傳檔案的錯誤訊息: Connection Closed
阿恆
最近使用 Nextcloud 用戶端把一個檔案同步到伺服器的時候,總是出現 connection closed 的錯誤,感到莫名其妙,上網查找,竟然發現有無數人都遇到這個問題,而且問題已經積壓多年,我花了一些功夫終於找出問題的根源,並且解決了它。
Nextcloud 的王牌功能就是類似 Dropbox、One Drive、iCloud 等檔案同步,讓我們在不同電腦上的檔案互通,在一部電腦上做出的修改,立即更新到其他電腦,比起 Dropbox 之類的服務,Nextcloud 需要你自行架設伺服器,這樣你的檔案便完全在你的控制之下,無需擔心被大公司偷偷拿來收集的個人資訊,或者用來訓練 AI。
Nextcloud 還提供其他網上服務,例如日曆、聯絡人資料庫、視像會議伺服器等等,將來有機會我會介紹一下。
回到我開頭提過的 connection closed 問題,面對這個毫無用處的錯誤訊息,真的感到很無奈,我要上傳的檔案的確有點兒大,但更大的檔案以前也曾經成功過,我也確定伺服器上的 Nginx (網站伺服器) 和 PHP (Nextcloud 是用 PHP 寫成的) 都設定可以上傳足夠大的檔案,Nginx 和 PHP 的日誌也沒有任何相關的紀錄可供調查,於是我努力回想最近在伺服器、網絡、用戶端……有甚麼改動過,Bingo!我在大約一個月前設定了 Cloudflare 的 proxy 服務,事實上這正是問題的根源。
先旨聲明,我對 Cloudflare 的 proxy 服務非常欣賞,尤其是他們的免費套餐,已經包含了豐富的防止網絡攻擊、保護伺服器、DNS 管理、電郵郵件路由等等,非常實用,是伺服器管理員不可或缺的工具。
使用 Cloudflare 的 proxy,用戶不會直接聯繫到伺服器,而是先連結到 Cloudflare 的中途站,再由中途站把網絡封包轉送給伺服器,回程也是經過這條路徑。Cloudflare 的中途站對於檔案上傳有限制,免費套餐每個檔案不可以超過 100MB。
Nextcloud 上傳檔案沒有大小的限制,當檔案很大的時候,它會把檔案切割成小塊上傳,每一小塊稱為 chunk,Chunk 的大小由 1MB 至 1GB 自動調整(這是用戶端版本 3.10 的文檔,我查看過較早版本的文檔,具體的數字是相同的),當 Nextcloud 要上傳很大的檔案時,會逐漸把上傳的 chunk 的大小增加,到了某一刻超過了 Cloudflare 的 100MB 限制,便會被 Cloudflare 的中途站中斷通訊,出現 connection closed 的錯誤訊息。
解決這個問題的方法時在 Nextcloud 的用戶端限制 chunk 的最大數值,經過多次嘗試,我發現設定在 Cloudflare 限制的 100MB 的一半,即 50MB 便不會再遇到錯誤訊息。為什麼是 50MB 而不是 100MB?對不起,我不熟悉 Nextcloud 的用戶端和伺服器端怎樣動態商定 chunk 的大小,所以無法猜度,知道細節的網友有以教我。
具體的方法,首先停止 Nextcloud 用戶端,然後打開 Nextcloud 用戶端的設定檔,這個設定檔可以在以下路徑找到:
- Linux:$HOME/.config/Nextcloud/nextcloud.cfg
- macOS:$HOME/Library/Preferences/Nextcloud/nextcloud.cfg
- 微軟視窗:%APPDATA%\Nextcloud\nextcloud.cfg
在 [General] 分段中找尋或新增:
|
|
儲存檔案,最後啟動 Nextcloud 用戶端便完成了。