-
Notifications
You must be signed in to change notification settings - Fork 121
Backend (zh_TW)
由於瀏覽器的安全限制,網頁剪貼簿的一些進階功能需要搭配後端伺服器才能運作。後端伺服器可用我們製作的 PyWebScrapBook 架設,基本設定可參見基本操作。
PyWebScrapBook 支援許多設定,大部分可藉由編輯 config.ini
調整,可用的設定值可在命令列執行 wsb help config
檢視。以下介紹幾種設定方式:
傳統 ScrapBook X 的資料結構是把擷取資料儲存於 data/
目錄,元資料儲存於 tree/
目錄,PyWebScrapBook 預設的資料結構則是把擷取資料儲存於貼簿的根目錄,元資料儲存於 .wsb/tree/
目錄,如此一來所有元資料都統一放置於 .wsb
子目錄下,更方便管理。
若要使用 PyWebScrapBook 預設的資料結構,可省略 wsb config -ba
直接對目錄執行 wsb serve
,若已執行過,可編輯 .wsb/config.ini
將 [book ""]
區的選項刪除或設成註解,像這樣:
; [book ""]
; name = scrapbook
; top_dir =
; data_dir = data
; tree_dir = tree
; index = tree/map.html
; no_tree = false
或者,也可以重新設定:
[book ""]
name = scrapbook
top_dir =
data_dir =
tree_dir = .wsb/tree
index = .wsb/tree/map.html
no_tree = false
預設情況下後端伺服器可存取特殊資料夾 .wsb
。若希望進一步提高安全性及避免因特定錯誤操作搞壞系統,可更改後端伺服器的根目錄使之不包含 .wsb
。
例如對於以下的目錄結構:
C:\Users\MyUserName\ScrapBooks
C:\Users\MyUserName\ScrapBooks\.wsb
C:\Users\MyUserName\ScrapBooks\public
C:\Users\MyUserName\ScrapBooks\public\tree
C:\Users\MyUserName\ScrapBooks\public\data
以下設定以 C:\Users\MyUserName\ScrapBooks\public
作為後端伺服器的根目錄,而 .wsb
目錄不在可存取範圍:
[app]
root = public
[book ""]
name = scrapbook
top_dir =
data_dir = data
tree_dir = tree
index = tree/map.html
no_tree = false
此設定會導致備份目錄(預設路徑為
.wsb/backup
)無法透過後端伺服器的網頁介面存取。若不希望如此,可把app.backup_dir
設定為app.root
以下的路徑,例如public/backup
。
例如想把後端伺服器架設在 C:\Users\MyUserName\ScrapBooks
,其下設三個剪貼簿。目錄結構如下:
C:\Users\MyUserName\ScrapBooks
C:\Users\MyUserName\ScrapBooks\scrapbook1
C:\Users\MyUserName\ScrapBooks\scrapbook2
C:\Users\MyUserName\ScrapBooks\scrapbook3
先開啟並進入命令列,切換工作目錄至 C:\Users\MyUserName\ScrapBooks
,執行 wsb config -ba
以產生設定檔,然後開啟純文字編輯器修改 C:\Users\MyUserName\ScrapBooks\.wsb\config.ini
,把原先的 [book ""]
區改為以下內容:
上述步驟可簡化為執行
wsb --root "C:\Users\MyUserName\ScrapBooks" config -bae
,即會產生及編輯設定檔。
[book ""]
name = Book1
top_dir = scrapbook1
data_dir =
tree_dir = .wsb/tree
index = .wsb/tree/map.html
no_tree = false
[book "scrapbook2"]
name = Book2
top_dir = scrapbook2
data_dir =
tree_dir = .wsb/tree
index = .wsb/tree/map.html
no_tree = false
[book "scrapbook3"]
name = Book3
top_dir = scrapbook3
data_dir =
tree_dir = .wsb/tree
index = .wsb/tree/map.html
no_tree = false
之後執行 C:\Users\MyUserName\ScrapBooks\.wsb\serve.py
即可啟動後端伺服器。網頁剪貼簿可在側欄切換檢視不同剪貼簿(各剪貼簿的顯示名稱由上述的 name
決定)。
架設多個剪貼簿時,可在不同剪貼簿之間轉移資料。可在側欄選取要轉移的項目用 複製到...
指令複製到其他剪貼簿。或用 管理
指令開啟其他剪貼簿的視窗,再選取要轉移的項目拖放到該視窗。
也可以把想轉移的項目匯出為封存檔,再匯入至另一個剪貼簿。
若剪貼簿伺服器架設在反向代理伺服器後,會需要 X-Forwarded-For
、X-Forwarded-Host
、X-Forwarded-Prefix
等 HTTP 標頭資訊以便正常運作。
剪貼簿伺服器預設會忽略這些 HTTP 標頭,需要設定相關的配置值才會讀取這些值。注意並非所有反向代理伺服器都會設定所有相關 HTTP 標頭,反向代理伺服器不設定的標頭就不應讀取,否則客戶端若偽造了相關標頭可能會造成安全性問題。
假設 https://example.com/
由 nginx 託管,且會把 https://scrapbooks.example.com/
代理給託管 http://127.0.0.1:8000/
的 PyWebScrapBook 伺服器,則 nginx 伺服器可設定以下標頭:
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
而 PyWebScrapBook 可設定如下:
[app]
...
allowed_x_for = 1
allowed_x_proto = 1
allowed_x_host = 1
allowed_x_port = 1
allowed_x_prefix = 0
假設 https://example.com/
由 nginx 託管,且會把 https://example.com/scrapbooks/
代理給託管 http://127.0.0.1:8000/
的 PyWebScrapBook 伺服器,則 nginx 伺服器可設定以下標頭:
location /scrapbooks/ {
rewrite ^/scrapbooks/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Prefix /scrapbooks;
}
而 PyWebScrapBook 可設定如下:
[app]
...
allowed_x_for = 1
allowed_x_proto = 1
allowed_x_host = 1
allowed_x_port = 1
allowed_x_prefix = 1