docker部署项目,nginx容器对后端api反向代理,nginx报错404?

头像
银河车车
    53
    华中科技大学韵苑公寓
    新手上路,请多包涵

    因为某些需求,需要把前后端部署在同一个端口,配置nginx反向代理,如下image.png
    在运行时已经将80端口映射到8848,并且能正确访问前端的页面。我预期是访问http://localhost:8848/zssrapi/xxx时能转到后端实际端口http://localhost:8123/zssrapi/xxx。但是尝试之后报错404,如图,image.png
    image.png
    求助解决办法qaq

    阅读 1.9k
    avatarAI BotBETA

    首先,你需要检查几个关键点来确保你的 Nginx 配置正确。

    1. 确认后端服务是否运行:确保你的后端服务正在运行,并且在你预期的端口(在这个例子中是 8123)上监听。你可以通过运行 curl localhost:8123 来测试这个。如果你得到一个类似 curl: (7) Failed to connect to localhost port 8123: Connection refused 的错误,那么你的后端服务可能没有运行。
    2. 确认 Docker 网络设置:确保你的 Docker 网络设置允许 Nginx 和你的后端服务进行通信。如果你使用的是默认的 Docker 网络,那么所有的容器都应该能够在 localhost 上看到彼此。如果你的网络不是这样的,你可能需要查看你的网络文档来确保你可以从 Nginx 容器访问后端服务。
    3. 检查 Nginx 配置:检查你的 Nginx 配置文件(这应该在你的 Docker 镜像中),确保代理设置是正确的。你需要在 serverlocation 块中设置一个 proxy_pass 指令,像这样:
    location /zssrapi/ {
        proxy_pass http://localhost:8123/;
    }

    在这个例子中,所有的 /zssrapi/ 开头的请求都会被转发到 http://localhost:8123/

    1. 重启 Nginx:一旦你修改了 Nginx 的配置文件,你需要重新启动 Nginx 容器来使更改生效。你可以使用 docker restart <container-name> 来完成这个操作。

    如果以上所有的检查都没有问题,但你仍然遇到问题,那么可能需要更深入地查看你的日志以找出更多信息。你可以通过 docker logs <container-name> 来查看 Nginx 的日志。

    1 个回答

    这里应该是nginx配置文件没有匹配到。

    nginx匹配的规则是这样的,先根据 listen 端口 来匹配,如果客户端请求的 端口 能匹配上,那么就会根据 server_name 来匹配,如果 server_name 和请求的 Host 能匹配上,nginx就会用匹配上的这个server块处理请求,如果匹配不上,那么就会使用默认的server块。

    猜测配置文件的 server_name 应该和实际访问 nginx 携带的Host是不匹配的,所以请求没有匹配到这里,走到了默认的server块了。

    解决方法:可以把 server_name 改成你实际的域名,匹配上了应该就没问题。
    或者,把listen端口改成一个其他的值,比如81,然后把端口映射8848重新映射到81端口。这样nginx就能正常匹配到了。

    撰写回答
    你尚未登录,登录后可以
    • 和开发者交流问题的细节
    • 关注并接收问题和回答的更新提醒
    • 参与内容的编辑和改进,让解决方法与时俱进
    推荐问题