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

如何让Apache与Traefik Docker代理共存并实现请求转发?

解决Traefik与Apache端口冲突并实现通配符域名转发的配置方案

步骤1:调整Traefik容器端口映射

修改你的Traefik docker-compose.yml,将默认的80/443端口映射改为20080/20443,避免与Apache冲突:

services:
  traefik:
    image: traefik:v2.10
    ports:
      - "20080:80"    # 外部HTTP端口 -> Traefik内部80端口
      - "20443:443"   # 外部HTTPS端口 -> Traefik内部443端口
      - "8080:8080"   # Traefik管理端口(可选)
    # 其他原有配置保持不变

重启Traefik容器:

docker-compose up -d traefik

步骤2:启用Apache代理相关模块

运行以下命令启用Apache反向代理所需的模块:

sudo a2enmod proxy proxy_http ssl rewrite headers proxy_connect
sudo systemctl restart apache2

步骤3:配置Apache通配符反向代理虚拟主机

创建新的Apache配置文件 /etc/apache2/sites-available/docker-proxy.conf,同时处理HTTP和HTTPS的通配符请求:

HTTP转发配置(80端口)

<VirtualHost *:80>
    ServerName docker-domain1.loc
    ServerAlias *.docker-domain1.loc

    ProxyPreserveHost On
    ProxyRequests Off

    # 转发所有请求到Traefik的HTTP端口
    ProxyPass / http://localhost:20080/
    ProxyPassReverse / http://localhost:20080/

    # 传递协议头部给Traefik
    RequestHeader set X-Forwarded-Proto "http"
</VirtualHost>

HTTPS转发配置(443端口)

先生成本地自签通配符证书(本地开发无需信任机构颁发):

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/ssl/private/docker-domain1.loc.key \
  -out /etc/ssl/certs/docker-domain1.loc.crt \
  -subj "/CN=*.docker-domain1.loc"

然后在配置文件中添加HTTPS部分:

<VirtualHost *:443>
    ServerName docker-domain1.loc
    ServerAlias *.docker-domain1.loc

    # 启用SSL并指定证书路径
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/docker-domain1.loc.crt
    SSLCertificateKeyFile /etc/ssl/private/docker-domain1.loc.key

    ProxyPreserveHost On
    ProxyRequests Off

    # 转发到Traefik的HTTPS端口
    ProxyPass / https://localhost:20443/
    ProxyPassReverse / https://localhost:20443/

    # 禁用Traefik自签证书的验证(本地开发环境)
    SSLProxyEngine on
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off

    # 传递协议头部给Traefik
    RequestHeader set X-Forwarded-Proto "https"
</VirtualHost>

步骤4:启用配置并重启Apache

sudo a2ensite docker-proxy.conf
sudo systemctl restart apache2

步骤5:配置本地hosts文件

编辑 /etc/hosts,将所有Docker相关域名指向本地回环地址:

127.0.0.1 docker-domain1.loc
127.0.0.1 docker-app1.docker-domain1.loc
127.0.0.1 docker-app2.docker-domain1.loc
# 按需添加更多子域名

注:/etc/hosts不支持原生通配符解析,需逐个添加子域名;若需更灵活的本地DNS,可安装dnsmasq实现通配符解析。

步骤6:验证配置

  • 启动Apache和Traefik容器,确保两者无端口冲突
  • 访问 http://docker-app1.docker-domain1.loc 和 https://docker-app1.docker-domain1.loc,确认请求正常转发到Traefik管理的Docker服务
  • 访问原有Apache项目 http://apache-app1.apache-domain1.loc,确认服务正常运行

关键注意事项

  • 避免在Apache配置中使用带https://的ServerAlias,仅需填写纯域名
  • 本地开发环境禁用SSL证书验证是安全的,生产环境需使用可信证书并启用验证
  • Traefik内部仍使用80/443端口,无需修改Traefik的入口点配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:25:25