使用Traefik反向代理同域名部署WordPress与Django的路由配置问题
配置调整步骤
1. 补全docker-compose production.yml配置
先在volumes区域新增WordPress相关存储卷,再在services区域添加WordPress和对应数据库服务,原有配置全部保留即可:
version: '3' volumes: # 原有卷保留 production_postgres_data: {} production_postgres_data_backups: {} production_traefik: {} # 新增wordpress相关卷 production_wordpress_data: {} production_wordpress_db_data: {} services: # 新增wordpress及依赖数据库服务 wordpress: image: wordpress:latest restart: always environment: WORDPRESS_DB_HOST: wordpress-db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: 替换为你的强密码 WORDPRESS_DB_NAME: wordpress volumes: - production_wordpress_data:/var/www/html depends_on: - wordpress-db wordpress-db: image: mysql:8.0 restart: always environment: MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: 替换为你的强密码 MYSQL_ROOT_PASSWORD: 替换为你的强root密码 volumes: - production_wordpress_db_data:/var/lib/mysql # 以下原有django、postgres、traefik、redis服务全部保留 django: # 原有配置不变 ...
2. 修改traefik.yml路由规则
仅需要修改http区块的配置,新增优先级更高的WordPress路由和服务定义,原有Django相关配置全部保留即可:
http: routers: # 新增WordPress路由,优先级设为100,高于默认路由确保匹配优先 wordpress-secure-router: rule: "(Host(`example.com`) || Host(`www.example.com`)) && (Path(`/`) || PathPrefix(`/about`) || PathPrefix(`/contact`) || PathPrefix(`/wp-`))" entryPoints: - web-secure service: wordpress tls: certResolver: letsencrypt priority: 100 # 原有Django路由保留,优先级更低,未匹配到WordPress规则的请求全部走Django web-secure-router: rule: "Host(`example.com`) || Host(`www.example.com`)" entryPoints: - web-secure middlewares: - csrf service: django tls: certResolver: letsencrypt middlewares: # 原有csrf配置不变 ... services: django: # 原有django服务配置不变 ... # 新增WordPress服务定义,指向wordpress容器的80端口 wordpress: loadBalancer: servers: - url: http://wordpress:80
规则里的PathPrefix(/wp-)是为了匹配WordPress的静态资源、管理后台等默认路径,避免出现样式丢失、后台无法访问的问题
3. 生效验证
所有配置修改完成后,执行以下命令重启服务:docker-compose -f production.yml up -d --build
启动完成后即可验证规则:
- 访问
/、/about、/contact路径返回WordPress内容 - 访问其他路径返回Django系统内容
注意事项
- 所有占位的密码字段请替换为自己的强密码
- 如果WordPress有额外自定义路径,直接在路由规则的条件中新增对应
PathPrefix(/自定义路径)规则即可 - 若WordPress出现跳转异常,进入WordPress后台的「设置」-「常规」,确认站点地址配置为你的正式域名
https://example.com
内容的提问来源于stack exchange,提问作者Mikhail Skorikov
相关产品推荐
相关产品推荐

