如何使用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
验证步骤:
- 先在容器内部测试连通性,执行命令
docker exec -it caddy curl localhost:80,确认可以正常返回Hello, Caddy!内容 - 验证宿主机端口监听状态,执行
ss -tulpn | grep 8988,确认监听进程为docker-proxy - 本地访问
10.0.30.21:8988,此时应该可以正常看到Caddy返回的内容,不会再跳转到Nginx站点
第二步:配置SWAG反向代理到Caddy(实现最终需求)
你需要让DOMAIN1.com的公网请求通过SWAG转发到Caddy服务,操作如下:
- 进入SWAG挂载的配置目录
/mnt/data/docker/swag/config/nginx/site-confs - 新建站点配置文件
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; } }
- 重启SWAG容器生效配置:
docker restart swag
后续Caddy正式站点配置示例
:80 { root * /srv file_server # 按需添加其他配置,比如反向代理、重写规则等 }
注意:因为证书已经由SWAG统一管理,Caddy不需要再配置HTTPS和证书申请,保持监听80端口即可。
内容的提问来源于stack exchange,提问作者Aephir
相关产品推荐
相关产品推荐

