跳到主要内容

使用 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/OutlineFoundation/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 服务器浏览互联网。