Nginx代理多Docker容器应用:自定义应用404问题排查
排查与解决思路
代理路径传递问题
当前Nginx的location /app配置会把/app完整路径传给后端的自定义应用。如果你的应用本身没有配置/app开头的路由,自然会返回404。解决办法二选一:- 修改自定义应用,添加
/app路径的路由支持; - 在Nginx的
proxy_pass末尾加/,这样Nginx会把/app去掉后再转发请求:location /app { proxy_pass http://${APP_HOST}:3000/; }
- 修改自定义应用,添加
验证后端容器的可访问性
直接进入Nginx容器,用curl测试能不能访问到自定义应用:docker exec -it documan-nginx-redirect curl http://app_container:3000如果这一步也返回404,说明问题出在自定义应用本身,和Nginx无关,要检查应用的路由配置、端口监听或者容器是否正常启动。
检查Nginx配置的变量替换
进入Nginx容器,查看生成的最终配置文件,确认${APP_HOST}已经被正确替换成app_container:docker exec -it documan-nginx-redirect cat /etc/nginx/conf.d/default.conf如果变量没替换成功,可能是
envsubst的参数或者模板里的变量拼写有问题,仔细核对写法。检查自定义应用的端口监听
确认app_container内部的应用确实在监听3000端口。可以用docker inspect app_container查看容器的端口配置,或者进入容器内部用netstat -tulpn(如果容器里有这个工具)检查端口是否被正确监听。
内容的提问来源于stack exchange,提问作者Monika Žunec
相关产品推荐
相关产品推荐

