宝塔面板从 Nginx 切换到 Caddy:详细教程
Caddy 是一个现代的 Web 服务器,具有自动 HTTPS、简单的配置语法和强大的反向代理功能。本文将指导你如何从 Nginx 迁移到 Caddy,逐步实现 HTTPS 反向代理。
前提条件
- 拥有一个已解析到服务器 IP 的域名。
- 已安装 Docker,方便运行 Caddy 容器。(商店可以下载安装caddy)
步骤一:停止并移除 Nginx
在切换到 Caddy 前,首先需要停止并移除 Nginx 服务,以避免端口冲突。
-
停止 Nginx 服务:
systemctl stop nginx
-
禁用 Nginx 自动启动(可选):
systemctl disable nginx
-
确认 Nginx 已停止:
systemctl status nginx
确认 Nginx 状态为
inactive
。
步骤二:安装 Caddy
我们使用 Docker 来运行 Caddy,这样更便于管理。
1. 拉取并运行 Caddy Docker 容器
运行以下命令,拉取 Caddy 镜像并启动容器:
docker run -d --name caddy -p 80:80 -p 443:443 caddy
这条命令将 Caddy 容器启动并暴露 80 和 443 端口。
步骤三:配置 Caddy 反向代理
1. 准备 Caddyfile
Caddy 使用一个简单的配置文件 Caddyfile
来定义站点和反向代理。你可以在 /www/server/caddy/Caddyfile
中创建或编辑该文件。配置内容如下:
# 强制 HTTP 配置
http://你的域名 {
reverse_proxy 127.0.0.1:8300
}
# 强制 HTTPS 配置并加载手动证书
https://你的域名 {
reverse_proxy 127.0.0.1:8300
tls /etc/letsencrypt/live/你的域名/fullchain.pem /etc/letsencrypt/live/你的域名/privkey.pem
}
解释:
reverse_proxy 127.0.0.1:8300
:将流量代理到本地 8300 端口。tls
:指定 HTTPS 所需的证书路径。
2. 使用 Certbot 手动申请证书
如果你还没有 SSL 证书,可以使用 certbot
工具手动申请。
-
安装
certbot
(适用于 CentOS,其他系统请根据包管理器安装):yum install epel-release -y yum install certbot -y
-
申请证书:
certbot certonly --standalone -d 你的域名
成功后,证书将存放在
/etc/letsencrypt/live/你的域名/
目录下。
步骤四:将证书目录挂载到 Docker 中
为了使 Docker 容器能够访问 /etc/letsencrypt
目录中的证书,需要在启动 Caddy 时挂载该目录。
-
停止并移除现有的 Caddy 容器:
docker stop caddy docker rm caddy
-
使用以下命令重新启动 Caddy 容器,并挂载证书目录:
docker run -d --name caddy \ -v /etc/letsencrypt:/etc/letsencrypt:ro \ -v /www/server/caddy/Caddyfile:/etc/caddy/Caddyfile \ -p 80:80 -p 443:443 \ caddy
其中,
-v /etc/letsencrypt:/etc/letsencrypt:ro
表示将/etc/letsencrypt
目录挂载到容器内,并设置为只读。
步骤五:检查和调试
1. 查看 Caddy 日志
查看 Caddy 容器的日志,确保配置正常加载,HTTPS 启用成功:
docker logs caddy
日志中应显示 HTTPS 已启用,并在端口 443 监听。
2. 测试 HTTPS 访问
在浏览器中访问 https://你的域名
,确认可以通过 HTTPS 访问,并没有任何安全警告。
3. 使用外部工具测试
可以使用 SSL Labs 等在线工具,检查 HTTPS 配置是否正确,证书是否有效。
常见问题排查
问题 1: Caddy 无法加载证书
-
确认
/etc/letsencrypt
目录的权限。使用以下命令确保所有用户有读取权限:chmod -R 755 /etc/letsencrypt
问题 2: Caddy 仅监听 HTTP 端口
- 如果 Caddy 日志中显示
server is listening only on the HTTP port
,请确认Caddyfile
中配置了https://你的域名
块,并明确指定了证书路径。
问题 3: 防火墙或云服务器安全组未开放 443 端口
-
确保服务器的防火墙或云提供商的安全组允许 80 和 443 端口访问。
firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=443/tcp firewall-cmd --reload
总结
通过以上步骤,你可以成功从 Nginx 切换到 Caddy,实现自动 HTTPS 和反向代理功能。Caddy 的配置非常简单,且具有强大的自动 HTTPS 功能,适合快速搭建安全的 Web 服务。如果遇到任何问题,可以参考日志信息进行排查或进一步调整配置。