React.js+Nginx+Docker Compose环境下/auth/signin 404错误求助
解决Nginx代理下/auth/signin的404错误
先定位404的来源
首先要明确这个404是Nginx自身返回的,还是后端site-fe服务返回的:
- 在Nginx服务器上执行命令,直接请求后端服务验证:
如果返回curl -I http://site-fe:80/auth/signinHTTP/1.1 404 Not Found,说明问题出在前端服务site-fe,需要检查它的路由配置或部署的静态文件是否包含/auth/signin路径。
后端服务正常时,排查Nginx配置问题
如果后端site-fe确实存在/auth/signin路径,按以下步骤检查:
确认请求路径传递正确性
当前location /的proxy_pass http://site-fe:80配置会完整传递请求路径(包括/auth/signin)给后端,这部分逻辑是正确的。另外配置中已设置proxy_set_header Host $host;,满足多数后端服务对Host头的依赖要求。排除location规则冲突
当前配置仅包含/和/api两个location,/auth/signin不会被/api前缀匹配拦截,会正常走/的代理规则,不存在规则冲突问题。处理缓存引发的异常(针对你遇到过的304问题)
若浏览器缓存了旧的404响应,会出现304未修改的情况,可在location /块中添加缓存控制头强制刷新:add_header Cache-Control "no-cache, no-store, must-revalidate"; add_header Pragma "no-cache"; add_header Expires 0;调试完成后可根据业务需求调整缓存策略。
开启详细日志追踪上游响应
修改Nginx的http块,添加详细日志格式,以便明确上游服务的状态:log_format detailed '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '"$upstream_addr" "$upstream_status" "$upstream_response_time"'; access_log /var/log/nginx/access.log detailed;重启Nginx后重新请求,查看日志中的
$upstream_status字段:- 若
$upstream_status为404,确认是后端服务的问题; - 若
$upstream_status为空,说明Nginx未成功转发请求到后端,检查site-fe服务是否正常运行、网络是否连通。
- 若
其他排查方向
- 查看
site-fe服务的日志,确认是否接收到/auth/signin请求,以及返回404的具体原因; - 用
ping site-fe测试Nginx服务器是否能正常解析该主机名; - 检查防火墙或安全组是否允许Nginx访问
site-fe:80端口。
内容的提问来源于stack exchange,提问作者Kito
相关产品推荐
相关产品推荐

