The Issue of the Day Before

將 Caddy 安裝成正向代理伺服器

-

Caddy Server 下載頁,選擇主機的 PLATFORM(e.q. Linux 64-bit), 需要的 PLUGINS(e.q. hook.service, http.forwardproxy, http.ipfilter) 和適當的 LICENSE(e.q. Personal) → 複製 One-step installer script (bash) 內的指令到要安裝的主機上執行該指令 → 設定 Caddy Server 設定檔 → 執行 Caddy Server

Why

除非 ISP 有提供,要找到一個免費又穩定的的 Proxy Server 著實是一個問題。 實在找不到也只能自己架設一個。但動不動就要架設並管理一個老舊又效率不彰的 Squid 或要搞清楚 Apache (with mod_proxy) 的設定也實在是一個麻煩。而 Nginx 雖然在反向代理上優秀,但正向代理上卻是問題多多,或可以試試 Nginx (module provides "CONNECT" HTTP method) 模組來幫忙。 HAProxy 可以算是神兵利器,但 HAProxy(option http_proxy) 只支援純 IP 的位址,不解析 DNS,神功廢掉大半,用途受限。

查了半天資料,最後決定用 Caddy Server,雖然他也沒直接支援 Forward Proxy,但還好有 Caddy(plugin http.forwardproxy)

What

Caddy Server

Caddy 是使用 GoLang 編寫的 Web 伺服器, 一般常用來建立反向代理(Reverse proxy)或靜態網頁伺服器。 以設定簡單和自動簽發 HTTPS 證書為賣點。 Let’s Encrypt 是默認的證書頒發機構。

Forward proxy

代理伺服器會接收客戶端傳送的請求後轉發給其他伺服器。 代理伺服器不會改變客戶端的請求 URI,在直接傳送給前方持有資源的目標伺服器後,取回資源再送回給客戶端。

How

取得 Caddy 執行檔

  1. 到 Caddy Server 下載頁面

  2. 選擇需要的 PLATFORM 和 PLUGINS

    • Choose platform: Linux 64-bit (or your OS)

    • Choose your plugins: Add plugins

      • hook.service: 以 service 執行

      • http.forwardproxy: 正向代理插件

      • http.ipfilter: 過濾查詢請求的 IP

    • Choose license: Personal (free)

  3. 下載檔案(兩個方法)

    Direct link to download

    透過下載連結取得壓縮檔,複製輸入欄內的 URL,透過瀏覽器或 wget 之類的指令下載。
    壓縮檔根據平台選擇有不同的類型:

    • Windows: zip

    • Linux: tag.gz

    One-step installer script (bash)

    直接複製輸入欄內的指令,透過 curl 執行,即可。(OS 上必須有支援 curl)

> curl https://getcaddy.com | bash -s personal hook.service,http.forwardproxy,http.ipfilter

設定

編輯 caddy server 的設定檔。

沒有以 -conf <path> 指定設定檔時,內定是工作路徑下約定俗成的 Caddyfile

Caddyfile
host:port {                     // (1)
    root /home/www              // (2)
    ipfilter / {                // (3)
        rule allow
        ip xxx.xxx.xxx.xxx/xx   // (4)
    }
    forwardproxy {
        hide_ip                 // (5)
    }
}
  1. 提供服務的網址, host 可以省略,只指定服務傾聽的埠 :port 內定會是 2015

  2. 指定網站根目錄的路徑,因為只是代理沒有提供資源,所以可省略,內定會是工作路徑

  3. 啟用 ipfilter, 網址路徑吻合 / 都要符合下面的過濾原則

  4. 設定可使用 proxy server 的客戶端 IP 或 IP 範圍,建議設定為只有內部私有 IP 可以存取

  5. 啟用 forward proxy 並隱藏客戶端來源 IP

啟用

直接執行

> sudo caddy

指定設定檔執行

> sudo caddy -conf <path/Caddyfile>

以 service 執行

> sudo caddy -service install  // (1)
> sudo caddy -service start    // (2)
  1. 第一次必須先將 Caddy 安裝成服務

  2. 以服務啟動

以 service 執行並指定設定檔

> sudo caddy -service install -conf <path> // (1)
> sudo caddy -service start
  1. 安裝成服務時指定設定檔,如果已經初始化過可以先 caddy -service uninstall 再安裝

Behind

一台不夠,那就來三台吧。

Caddy 天生就可以架反向代理(Reverse proxy)伺服器。只要前面架一個反向代理指向後面多台的正向代理,那不就完美了。 但事不從人願, Caddy 在轉發時會移除 request 的 Host。所以後面的正向代理伺服器也就不知道要轉送給哪一台主機要求資源。 所以,你得找一個沒這問題的反向代理伺服器來工作。

當然,首選 HAProxy。 怎麼架,就請參考 架設分散式的正向代理

Caddy2 不支援 forwardproxy

Caddy2 目前不支援 forwardproxy 插件。可以改用 Tinyproxy,或 dante

閱讀在雲端