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

Docker环境下Caddy反向代理Nginx/httpd的配置问题与需求实现

问题分析与解决方案

核心问题点

  1. 后端服务端口配置错误:nginx和httpd官方镜像默认监听80端口,但你的docker-compose.yaml中配置了expose: 8080/8081,容器内部服务并未在这些端口运行,导致Caddy转发请求失败。
  2. Caddyfile站点匹配规则错误:使用hostname:80作为站点标识,无法匹配localhost的请求,Caddy未对该请求执行转发逻辑,返回空白页。
  3. 反向代理逻辑冲突:连续写两个独立的reverse_proxy指令,会导致Caddy的路由逻辑混乱,无法正确处理请求分发。

修正后的配置文件

1. 修正docker-compose.yaml

将后端服务的暴露端口改为默认的80:

version: '3'
services:
  proxy:
    image: caddy:2.3.0-alpine
    ports:
      - "80:80"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
  service1:
    image: nginx:latest
    expose:
      - "80"  # nginx默认监听80端口
  service2:
    image: httpd:latest
    expose:
      - "80"  # httpd默认监听80端口

2. 修正Caddyfile

根据你的需求,提供两种常见配置方案:

方案一:负载均衡(请求随机转发到Nginx或httpd)
:80 {
    # 将两个后端服务加入负载均衡池,Caddy会自动分发请求
    reverse_proxy service1:80 service2:80
}
方案二:路径区分转发

按不同路径将请求转发到对应后端:

:80 {
    # 访问 localhost/nginx 时转发到Nginx
    handle /nginx* {
        reverse_proxy service1:80
    }
    # 访问 localhost/httpd 时转发到httpd
    handle /httpd* {
        reverse_proxy service2:80
    }
    # 根路径默认转发到Nginx(可根据需求调整)
    handle {
        reverse_proxy service1:80
    }
}

验证操作

  1. 停止现有容器:docker-compose down
  2. 启动修正后的服务:docker-compose up -d
  3. 验证访问:
    • 负载均衡方案:访问http://localhost,刷新页面会交替显示Nginx和httpd的默认页面
    • 路径区分方案:访问http://localhost/nginx显示Nginx页面,http://localhost/httpd显示httpd页面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:25:23