You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Caddy Docker容器仅向本地网络提供网站服务

问题排查与修复方案

核心问题定位

  • Caddyfile站点绑定错误:你当前配置的站点仅绑定localhost域名,仅响应Host头为localhost的请求。使用10.0.30.21:8988访问时,请求Host头为10.0.30.21,无法匹配到已配置的站点,触发Caddy默认的HTTPS重定向逻辑,跳转到IP的443端口,而宿主机443端口由SWAG(Nginx)监听,因此返回Nginx配置的站点内容。
  • 站点路径配置错误:根据你的docker-compose挂载规则,本地站点目录映射到Caddy容器内的/srv路径,你之前写的root * /site路径不存在,会导致站点返回404错误。

第一步:修复Caddy本地访问问题

修改你的Caddyfile为以下测试配置,匹配所有80端口的请求:

:80 {
  respond "Hello, Caddy!"
}

修改后重启Caddy容器:docker restart caddy

验证步骤:

  1. 先在容器内部测试连通性,执行命令docker exec -it caddy curl localhost:80,确认可以正常返回Hello, Caddy!内容
  2. 验证宿主机端口监听状态,执行ss -tulpn | grep 8988,确认监听进程为docker-proxy
  3. 本地访问10.0.30.21:8988,此时应该可以正常看到Caddy返回的内容,不会再跳转到Nginx站点

第二步:配置SWAG反向代理到Caddy(实现最终需求)

你需要让DOMAIN1.com的公网请求通过SWAG转发到Caddy服务,操作如下:

  1. 进入SWAG挂载的配置目录/mnt/data/docker/swag/config/nginx/site-confs
  2. 新建站点配置文件domain1.conf,写入以下内容:
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name DOMAIN1.com;

    include /config/nginx/ssl.conf;
    client_max_body_size 0;

    location / {
        include /config/nginx/proxy.conf;
        resolver 127.0.0.11 valid=30s;
        set $upstream_caddy 172.11.0.80;
        proxy_pass http://$upstream_caddy:80;
    }
}
  1. 重启SWAG容器生效配置:docker restart swag

后续Caddy正式站点配置示例

:80 {
  root * /srv
  file_server
  # 按需添加其他配置,比如反向代理、重写规则等
}

注意:因为证书已经由SWAG统一管理,Caddy不需要再配置HTTPS和证书申请,保持监听80端口即可。

内容的提问来源于stack exchange,提问作者Aephir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:24:03