Vue+Django REST+Traefik部署后出现404页面未找到问题的解决求助
Vue+Django REST+Traefik部署后出现404页面未找到问题的解决求助
Hey,我看了你用Vue+Django REST+Traefik部署后遇到404的问题,结合你贴的配置文件,梳理了几个大概率踩坑的点和解决办法,你可以逐一排查试试:
1. Traefik路由规则的语法错误(最可能的原因)
你的traefik.yml里路由规则有两处明显的语法问题,直接导致域名/路径匹配失败:
- Vue路由的Host规则多了斜杠:
原规则里写了Host(lovelinkconnect.com/),Host匹配的是纯域名,加斜杠会让Traefik无法识别这个域名,改成:vue-secure-router: rule: 'Host(`lovelinkconnect.com`) || Host(`www.lovelinkconnect.com`)' entryPoints: - web-secure service: vue tls: certResolver: letsencrypt - Django路由的逻辑运算符优先级问题:
原规则PathPrefix(/api/) && Host(lovelinkconnect.com/) || Host(www.lovelinkconnect.com)没有给Host部分加括号,会导致逻辑判断混乱,比如可能匹配到www.lovelinkconnect.com下非/api/的路径,改成:web-secure-router: rule: 'PathPrefix(`/api/`) && (Host(`lovelinkconnect.com`) || Host(`www.lovelinkconnect.com`))' entryPoints: - web-secure middlewares: - csrf service: django tls: certResolver: letsencrypt
2. 容器网络连通性问题
你的docker-compose.yml没有显式定义自定义网络,虽然默认网络也能让容器互通,但偶尔会出现服务名解析失败的情况。建议添加一个专属网络,确保Traefik能正常访问Vue和Django服务:
# 在docker-compose.yml的volumes下方添加 networks: prod_network: driver: bridge # 给每个服务都加上networks配置,比如: services: vue: # 其他配置不变 networks: - prod_network django: &django # 其他配置不变 networks: - prod_network traefik: # 其他配置不变 networks: - prod_network # celeryworker、celerybeat、flower、postgres、redis、awscli也都需要加上networks字段
3. 服务端口可用性验证
先确认Traefik能正常访问到Vue和Django的内部服务:
- 进入Traefik容器执行测试命令:
如果返回正常的页面/API响应,说明服务没问题;如果返回连接失败,检查对应容器的日志,看Vue的dev server是否正常启动、Django的gunicorn是否监听5000端口。docker exec -it lovelinkconnect_production_traefik curl http://vue:5173 docker exec -it lovelinkconnect_production_traefik curl http://django:5000/api/
4. 额外小提醒
你的Vue容器用的是npm run dev启动开发服务器,生产环境建议换成构建后的静态文件(比如用nginx托管),不过这不是当前404的直接原因,先解决路由问题后再考虑优化。
按上面的步骤调整后,重启所有容器,应该就能正常访问了。
备注:内容来源于stack exchange,提问作者Stone
相关产品推荐
相关产品推荐

