宝塔面板的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 caddy

    8、报错:报错是 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

     

     

posted @ 2025-09-05 19:03  总统先生  阅读(35)  评论(0)    收藏  举报