使用 Caddy 实现自动 HTTPS

本指南介绍了如何使用强大易用的 Web 服务器 Caddy 来增强 Outline 服务器设置。Caddy 具有自动 HTTPS 功能和灵活的配置,是为 Outline 服务器提供支持的理想选择,尤其适合使用 WebSocket 传输的应用场景。

什么是 Caddy?

Caddy 是一种开源 Web 服务器,它易于使用、具备自动 HTTPS 功能且支持各种协议。该服务器简化了 Web 服务器配置,提供了以下实用功能:

  • 自动 HTTPS:Caddy 可自动获取和续订 TLS 证书,确保连接安全性。
  • HTTP/3 支持:Caddy 支持最新 HTTP/3 协议,能够实现更快、更高效的网络流量传输。
  • 支持插件扩展:Caddy 可通过插件进行扩展,以支持各种功能,包括反向代理和负载均衡。

第 1 步:前提条件

第 2 步:配置域名

在启动 Caddy 之前,请务必正确配置域名,使其指向服务器的 IP 地址。

  • 设置 A/AAAA 记录:登录 DNS 提供商的网站,设置域名的 A 记录和 AAAA 记录,确保它们分别指向服务器的 IPv4 地址和 IPv6 地址。
  • 验证 DNS 记录:通过权威查找验证 DNS 记录是否设置正确:

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

第 3 步:构建并运行自定义 Caddy build

使用 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-WebSocket 策略,其中 Web 服务器监听端口 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 服务器浏览互联网。