使用 Caddy 自動設定 HTTPS

本指南將說明如何運用 Caddy 強化 Outline 伺服器設定。Caddy 是一款功能強大又容易使用的網路伺服器,具備自動 HTTPS 功能和彈性設定,是架設 Outline 伺服器的理想選擇,尤其在使用 WebSocket 傳輸時,更能簡化設定。

什麼是 Caddy?

Caddy 是一款開放原始碼網路伺服器,主打簡單易用、自動設定 HTTPS 及支援多種通訊協定。這項服務可以簡化網路伺服器設定,並提供以下功能:

  • 自動 HTTPS:Caddy 會自動取得並更新 TLS 憑證,確保連線安全。
  • HTTP/3 支援:Caddy 支援最新的 HTTP/3 通訊協定,讓網路傳輸更快速有效率。
  • 以外掛程式擴充:Caddy 可透過外掛程式擴充,支援反向 Proxy、負載平衡等多種功能。

步驟 1:事前準備

步驟 2:設定網域

啟動 Caddy 前,請確認您的網域名稱已正確設定,指向您的伺服器 IP 位址。

  • 設定 A/AAAA 記錄:登入 DNS 供應商網站,將網域的 A 記錄設為指向伺服器的 IPv4 位址,AAAA 記錄設為指向 IPv6 位址。
  • 驗證 DNS 記錄:使用權威查詢確認 DNS 記錄設定正確,如下所示:

    curl "https://cloudflare-dns.com/dns-query?name=DOMAIN_NAME&type=A" \
      -H "accept: application/dns-json"
    

步驟 3:建構並執行自訂 Caddy 版本

使用 xcaddy 建構自訂 caddy 二進位檔,納入 Outline 核心伺服器模組和其他需要的伺服器擴充模組。

xcaddy build \
  # The example uses a YAML config, so include a YAML config adapter module.
  --with github.com/iamd3vil/caddy_yaml_adapter \
  # The Outline core server module.
  --with github.com/Jigsaw-Code/outline-ss-server/outlinecaddy

步驟 4:設定並執行搭配 Outline 的 Caddy 伺服器

建立新的 config.yaml 檔案並加入以下設定:

apps:
  http:
    servers:
      server1:
        listen:
          - ":443"
        routes:
          - match:
            - host:
              - 'DOMAIN_NAME'
            - path:
              - "/TCP_PATH"
            handle:
            - handler: websocket2layer4
              type: stream
              connection_handler: ss1
          - match:
            - host:
              - 'DOMAIN_NAME'
            - path:
              - "/UDP_PATH"
            handle:
              - handler: websocket2layer4
                type: packet
                connection_handler: ss1
  outline:
    shadowsocks:
      replay_history: 10000
    connection_handlers:
      - name: ss1
        handle:
          handler: shadowsocks
          keys:
            - id: user-1
              cipher: chacha20-ietf-poly1305
              secret: SHADOWSOCKS_SECRET

這項設定採用 Shadowsocks-over-WebSockets 策略,網路伺服器會監聽 443 通訊埠,並分別在 TCP_PATHUDP_PATH 路徑接收經 TCP 和 UDP 封裝的 Shadowsocks 流量。

使用已建立的設定,執行經由 Outline 模組擴充的 Caddy 伺服器,如下所示:

caddy run --config config.yaml --adapter yaml --watch

如需更多設定示例,請前往 outline-ss-server/outlinecaddy GitHub 存放區

步驟 5:建立動態存取金鑰

使用進階設定格式為使用者產生用戶端存取金鑰 YAML 檔案,並納入先前在伺服器端設定的 WebSocket 端點,如下所示:

transport:
  $type: tcpudp

  tcp:
    $type: shadowsocks

    endpoint:
      $type: websocket
      url: wss://DOMAIN_NAME/TCP_PATH
    cipher: chacha20-ietf-poly1305
    secret: SHADOWSOCKS_SECRET

  udp:
    $type: shadowsocks

    endpoint:
      $type: websocket
      url: wss://DOMAIN_NAME/UDP_PATH
    cipher: chacha20-ietf-poly1305
    secret: SHADOWSOCKS_SECRET

產生動態存取金鑰 YAML 檔案後,您需要將檔案提供給使用者,比如將檔案託管於靜態網站代管服務,或動態產生檔案。進一步瞭解如何使用動態存取金鑰

步驟 6:使用 Outline 用戶端連線

使用官方 Outline 用戶端應用程式 (1.15.0 以上版本),將新建立的動態存取金鑰新增為伺服器項目。點選「連線」,即可使用 Shadowsocks-over-Websocket 設定建立的通道連線至您的伺服器。

您可以使用類似 IPInfo 的工具,確認目前是否透過 Outline 伺服器瀏覽網際網路。