生产环境Docker部署MERN项目返回405 Not Allowed错误排查求助
核心问题根因
产生问题的核心原因是混淆了React代码的运行环境:React打包后的静态资源会下发到访客的本地浏览器执行,所有接口请求都是从访客的本地网络发起,并不是从服务器上的React容器内部发起,所以配置Docker内部容器名作为接口地址、不暴露API端口的方案完全不可行,请求根本到不了API服务。
收到的405错误是Traefik把接口请求转发给了React静态服务(如Nginx),静态服务默认不支持POST请求访问静态资源,因此直接返回405 Method Not Allowed。
问题修复方案
- 调整Traefik网关规则:新增路由规则,将所有接口请求(比如路径前缀为
/api的请求,或者自定义的接口前缀)直接转发到mernlama API容器,不需要单独对外暴露8800端口,Traefik可以在Docker内部网络完成转发。 - 调整前端请求路径:确保所有Axios请求的路径前缀和Traefik的路由规则匹配,比如所有接口都走
/api/xxx路径即可。
相关疑问解答
- CORS配置要不要移除?
不需要移除,也不需要额外调整。使用Traefik做统一网关后,前端页面和接口的域名、端口完全一致,不会触发跨域校验,CORS配置不会生效,留着无负面影响,删除也没问题。如果后续用二级域名独立部署API,再开启对应的CORS配置即可。 - LOCAL_HOST变量要不要加HTTP前缀?
要加,生产环境需要完整写为https://geolarp.com,之前使用的https:geoLARP.com是不符合URL规范的错误格式,会导致请求失败。
内容的提问来源于stack exchange,提问作者TurtleWolfe
相关产品推荐
相关产品推荐

