jim60105 / worker-img_router

A Cloudflare Worker used as abbreviated routing for my private img domain. (Cloudflare Worker)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Cloudflare worker Img Router

這是從屬於 jim60105/docker-Nextcloud 的Cloudflare Worker CD方案

說明

此Worker目的是縮短網址,將
img.domain.com/${pathname}
route至
nextcloud.domain.com/index.php/apps/sharingpath/${NEXTCLOUDUSERNAME}/Public/${pathname}
詳見[Docker] Nextcloud自有雲建置 img圖片縮址

在push至repo後,使用Github Action部屬至Cloudflare,並將所有參數以Github Secrets管理

設定

  1. 參閱Worker手冊,直至可以建立一般的線上worker
    (Wrangler cli為非必要,但這可以讓你先在本機build過,且tail指令可以接上deployed worker收log)
  2. 在github repo中設定以下secrets
    1. CF_ACCOUNT_ID: 由你的Cloudflare Account Home→Workers的右側找到,或是從wangler cli取得
    2. CF_API_TOKEN: 由你的Cloudflare Profile→API Token→Create Token產生,參照說明
    3. NEXTCLOUDUSERNAME: Nextcloud的用戶名稱
    4. SOURCEHOST: 短網域,例如 img.domain.com
    5. TARGETHOST: Nextcloud網域,例如 nextcloud.domain.com
    6. HOTLINK_IMG: Hot-link Protection將會重導向至此圖片網址,從盜鏈瀏覧時會看到這張圖片。預設值是這一張圖
    7. HOTLINK_ALLOWEDHOST: 允許圖片顯示的流量來源hostname,可填入多個RegExp,以;分隔。例如.*\.domain\.com;.*\.secdomain.com。預設為不啟動Hot-link Protection(填空值)
  3. git push to master branch使Action啟動,建立worker
  4. 至Cloudflare Worker設定route,將 img.domain.com/* 對應至此img_route worker

防盜鏈功能

可以設定重導向由外站來的圖片查詢,意即別人將你的圖片直接嵌入其它網站使用時,都會連到同一張警示圖片。
其主要目的是保護圖片站台流量,降低盜鏈。
請設定上述的HOTLINK_IMGHOTLINK_ALLOWEDHOST兩個環境變數。
HOTLINK_ALLOWEDHOST留空值則不做任何阻擋。

對於不阻擋的圖片,請在路徑(pathname)中加入preview關鍵字。
請用在og:image,使預覧圖片能正常被外站抓取,例:

https://img.domain.com/blog/preview.png
https://img.domain.com/blog/preview/myimage.png

隨機圖片功能

如果收到任何檔名為random、附檔名為圖片的request,worker會取得同目錄下的random.json,並從中隨機選擇一張相同格式的圖片返回
這功能設計來使用在論壇簽名檔圖片,每次重整就會不同

例: 訪問 img.domain.com/random.png,則會查詢 img.domain.com/random.json,從其中的png之下隨機選一張圖片返回
json檔格式範例在此,請使用相對路徑

random.json的安全性:
img網域只開放了圖片相關的附檔名,json檔並不能被直接訪問

參考資料

Set Up Github Actions: Deploy to Cloudflare Worker

https://www.serviops.ca/a-full-ci-cd-pipeline-for-cloudflare-workers-with-github-actions/

About

A Cloudflare Worker used as abbreviated routing for my private img domain. (Cloudflare Worker)

License:MIT License


Languages

Language:TypeScript 87.4%Language:JavaScript 12.6%