宝塔面板的nginx改用caddy
系统 opencloudos
安装启用后,宝塔面板会显示未安装nginx或apache,但不影响网站允许。
以下内容由cursor生成。
1、备份 Nginx 配置与站点数据
# SSH 到服务器(OpenCloudOS 基于 RHEL/CentOS) sudo mkdir -p /backup/nginx_$(date +%F) sudo cp -a /www/server/nginx /backup/nginx_$(date +%F)/ sudo cp -a /www/wwwroot /backup/nginx_$(date +%F)/
- 证书位置(宝塔):/www/server/panel/vhost/cert/你的域名/,后面可直接给 Caddy 用。
2、释放 80/443 端口(先别卸载 Nginx)
sudo systemctl stop nginx sudo systemctl disable nginx # 确认端口是否空闲 sudo ss -lntp | grep -E ':80|:443'
如果还有占用,先停掉相关服务(如 httpd、docker 里映射的服务等)。
3、安装 Caddy(官方仓库)
# 启用 Caddy 的 COPR 源并安装 sudo dnf copr enable @caddy/caddy -y sudo dnf install -y caddy # 验证版本 caddy version
4、开放防火墙端口
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
5、启动与自启动
sudo systemctl enable --now caddy sudo systemctl status caddy | cat # 查看日志(排障) sudo journalctl -u caddy -e | cat
6、与宝塔面板的关系
- Caddy 暂无宝塔官方集成,你需要手动维护 /etc/caddy/Caddyfile。
- 宝塔面板(默认 8888 端口)与 Caddy 不冲突,可保留面板;但把 Nginx 停止/禁用以避免占端口。
- 若决定卸载 Nginx:
-
sudo dnf remove -y nginx
7、配置文件
{ email admin@yourdomain.com # 如需在上线前用 ACME 测试环境,请启用下面一行,验证后删除 # acme_ca https://acme-staging-v02.api.letsencrypt.org/directory } (common_static) { encode zstd gzip header { X-Content-Type-Options nosniff Referrer-Policy strict-origin-when-cross-origin X-Frame-Options SAMEORIGIN # 确认全站 HTTPS 后再启用 HSTS(谨慎) # Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" } file_server } (common_php) { import common_static @tryfiles { file { try_files {path} /index.php } } rewrite @tryfiles {http.matchers.file.relative} # 任选其一(推荐 unix 套接字;若权限/SELinux 未就绪可先用 TCP) # php_fastcgi unix//run/php-fpm/www.sock php_fastcgi 127.0.0.1:9000 } # ---------- 站点 1 ---------- # 主域 www.example1.com { root * /www/wwwroot/example1.com # 静态站:启用下面一行 import common_static # PHP 站:改为启用下面一行,注释掉上面一行 # import common_php log { output file /var/log/caddy/example1.access.log format json } } # 跳到主域重定向(保持 URL 路径) example1.com { redir https://www.example1.com{uri} permanent } # ---------- 站点 2 ---------- www.example2.com { root * /www/wwwroot/example2.com # 静态站 import common_static # PHP 站改为启用: # import common_php log { output file /var/log/caddy/example2.access.log format json } }
# 跳到主域重定向(保持 URL 路径)
example2.com
{ redir https://www.example2.com{uri} permanent }
上面给你一份“单文件多站点 + 复用公共配置”的最佳实践 Caddyfile。特点:
- 自动申请与续期 SSL(Let’s Encrypt),只需保证 80/443 可公网直达。
- 公共片段统一启用压缩、静态服务与常用安全响应头。
- 提供 PHP 站点的典型 rewrite 与 php_fastcgi,按需启用。
- 规范化主域:www 永久 301 跳转到裸域。
请将占位域名与路径替换为你的实际值。
使用说明(简要):
- 替换:example1.com、example2.com、站点根目录路径、全局 email。
- 若为 PHP 站点:在对应站点块里启用 import common_php,并保证 php-fpm 正常运行;如使用 unix 套接字,请确保 /run/php-fpm/www.sock 对 caddy 可读写,再选用 php_fastcgi unix//run/php-fpm/www.sock。
- 检查并重载:
sudo caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile sudo systemctl reload caddy8、报错:报错是 Caddy 以 caddy 用户运行时,没有权限写入你配置的访问日志文件 /var/log/caddy/com.barcelona.access.log。解决有两种方式,选其一
方式A:为 Caddy 日志目录赋权(推荐
sudo mkdir -p /var/log/caddy sudo chown -R caddy:caddy /var/log/caddy sudo chmod 750 /var/log/caddy # 若启用 SELinux(默认常见),还需恢复安全上下文 sudo restorecon -R /var/log/caddy # 验证配置并重载 sudo caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile sudo systemctl restart caddy sudo systemctl status caddy | cat
- 方式B:移除/改为标准输出日志(最省事)
sudo sed -n '1,200p' /etc/caddy/Caddyfile | cat # 先自行确认位置 # 删除每个站点里的 log { ... } 段 sudo caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile sudo systemctl restart caddy journalctl -u caddy -e | cat
或
log {
output stdout
format console
}
这样日志不写文件,直接进 journalctl。补充:
- 你 Caddy 是以 caddy 身份运行的,只有把目标日志目录归属为 caddy:caddy,或写到 stdout,才能避免权限问题。
- 如果仍失败,请贴出 /etc/caddy/Caddyfile 中相关 log { ... } 段,我帮你微调。
9、启动
启用并立即启动
sudo systemctl enable --now caddy
验证状态与是否已设为开机自启
systemctl status caddy | cat systemctl is-enabled caddy
后续修改了 /etc/caddy/Caddyfile 只需热重载(不中断
sudo systemctl reload caddy
可选优化(一般不需要):
- 确保网络就绪后再启动(官方单元已包含 After=network-online.target/Wants=network-online.target,如你的系统未提供 wait-online 服务,可启用):
-
sudo systemctl enable NetworkManager-wait-online.service
如果你自定义过 caddy.service,改动后记得
-
sudo systemctl daemon-reload sudo systemctl restart caddy

浙公网安备 33010602011771号