Nextcloud login flow 搭配 nginx reverse proxy 的問題與解法

Photo by Neda Astani on Unsplash

使用 Nextcloud 已經有幾年的時間了,這一套真的是穩定好用的 Dropbox 替代品,如果有能力自行維護 Linux 系統的人很建議跑一套起來當做自己的雲端硬碟使用。搭配 Joplin 的話就可以無痛變身為 Evernote 替代品,完全走到哪同步到哪。

最近遇到的一個問題,困擾了我一兩天的時間,想說也許有人也會遇到類似的問題,因此把解法寫出來留個紀錄,順便給那些一樣遇到此問題的人一個節省時間的幫助。

先解釋一下我的 Nextcloud 環境,我是利用 Nextcloud 的 docker 跑在一台 linux server 上,然後透過 nginx reverse proxy 讓某一個 domain name 對應回去真正 service 的 docker port 那邊,完成 Nextcloud server https 的串接,這樣可以擁有 https 的保護,又可以享有 docker 的環境獨立。啟動的時候,會特別把 config 目錄跟 host 系統上的某個 working directory 連結,方便之後要改動 config.php 的時候,就可以直接從 host 過去改,不用再 login 到 docker 內部去才可以改。過程用 docker-compose.yml 處理掉,有需要的話再說一聲,可以提供給大家參考。

問題的起因很單純, Nextcloud client 端自從 2.65 版以後,一開始的帳戶登入就都改為透過 Browser 登入之後驗證然後再導回 Client,這次發生的狀況是在 Windows 上安裝 Nextcloud Client 發生,我相信其他平台的 Client 一定也會有類似問題,因為問題的發生點是在 Server 端。

現象是這樣,當 Windows 版的 Nextcloud Client 端安裝完成,準備要開始第一次的登入時,之前的做法是直接填入帳號與密碼,然後就可以進入到同步的畫面選擇要同步全部還是同步部分 Folder。

新版本的 Client 端,在填完連結的 URL 之後,就會連結 Browser 然後跳轉過去要在瀏覽器那邊登入,接著授權,授權完就可以讓 Client 端登入,開始同步。

怪就怪在,每次瀏覽器那邊登入完畢,按下授權存取之後,就只有看到那個圈圈一直轉,接下來什麼事情都沒發生。檢查了一下 nginx 的 log,發現有一個 url 一直被 try 可是一直找不到 (Status 404),/login/poll 這個 entry 持續沒有找到。

找了好一段時間都沒有找到正確的解法,後來找到一篇文章:

https://blog.linuxserver.io/2019/07/08/how-to-fix-nextcloud-16-desktop-client-login-loop/

依照裡面寫的步驟下去改 config.php,竟然就成功了。

關鍵在於,config.php 裡面的三個參數:

 'overwrite.cli.url' => 'https://<your.domain>',
 'overwritehost' => '<your.domain>',
 'overwriteprotocol' => 'https',

只要把 your.domain 換成你自己的 domain,然後 nginx 那邊不用動,直接讓 nextcloud docker restart 一次,就可以順利讓 client 端得到授權登入。

config.php 的位置在 /config 裡面,如果有一開始就用 -v 把 volume 掛到外面的 host 目錄,就可以在那邊發現這個檔案,打開來找一下就可以找到 overwirte.cli.url 這個設定,對照著改一下,就可以 docker restart 一次讓它生效。

這個問題也有在 Nextcloud 的 community 論壇中發現,顯見這是一個很多人會遇到的問題,寫在這邊給有遇到類似情況的朋友參考一下,或許可以省下您很多寶貴的時間。

Cheers!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料