filebrowser + nginx 建立自定義網域下載
動機
因為系上的實驗室內部有架設 filebrowser 提供檔案傳輸的服務,但最近遇到一個問題,在下載檔案時 filebrowser 會透過 JSON Web Token (JWT) 來驗證使用者,憑證輸入後會導致網址變得非常難看。因為常常會使用 wget 來下載檔案,不想要輸入又臭又長的網址,因此想出了一個方法解決了網址超長且意義不明確的問題。
- 因為輸入 token 導致網址超長
方法
透過 filebrowser 的邀請碼的方式來讓使用者下載檔案時不需要輸入 token,這樣也就意味著網址不會又臭又長的,而且可以搭配 Nginx 反向代理來進行訪問限制與轉發,使用自定義網域來指向邀請碼所提供的分享連結進行檔案下載。
實作
第一步
打開 filebrowser ,創建一個主資料夾,用來存放 filebrowser 裡的檔案,然後為它創建一個邀請碼,時間可以設訂 999 小時(含以上),確保連結不會在短期失效。
- 邀請碼創建完畢
第二步
創建完邀請碼後,透過邀請碼旁邊的複製按鈕,來取得分享連結。
第三步
透過 Nginx 來設定網路規則讓連線指向我們的分享連結,並禁止訪問特定的網址。
設定完之後就能夠透過指定網域來進行下載檔案啦!
nginx 設定範例:
1 | location ~ ^/dl/.+ { |
如何使用
依照你在 nginx 設定的網域並加上 dl/<目錄名稱or檔案名稱> 來下載你的檔案。
範例:
https://abc.com/dl/<目錄名稱or檔案名稱>
如何發現
使用 filebrowser 一段時間了,只知道可以透過邀請碼來下載檔案,事發後突然想到邀請碼不需要輸入 token 就能夠下載檔案,而且連結可以保留很長一段時間,因此我開始嘗試使用邀請碼來固定下載連結,後來又發現使用的連結有特定的格式關係,這讓我想到可以搭配 Nginx 來將我的網域導到這個特定的連結,因此就發現了這個方法解決了網址超長的問題之外,又能夠讓下載連結變得有意義、淺顯易懂。
- 主資料夾分享的下載連結
![]()
- 主資料夾底下檔案的下載連結
可以發現以 dl 後為主資料夾的邀請碼,之後裡面的每個資料夾或檔案都是以自己命名的名稱做區分,因此可以很好理解每個檔案的意義,透過 nginx 後,在輸入網址下載時可以只輸入邀請碼後面的部份,而不需要輸入前面重複的網址區塊。

可以發現以 dl 後為主資料夾的邀請碼,之後裡面的每個資料夾或檔案都是以自己命名的名稱做區分,因此可以很好理解每個檔案的意義,透過 nginx 後,在輸入網址下載時可以只輸入邀請碼後面的部份,而不需要輸入前面重複的網址區塊。