当前位置: 首页 > 知识库问答 >
问题:

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

公羊伟志
2023-10-09

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

共有2个答案

夏侯元忠
2023-10-09

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

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

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

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

闾丘京
2023-10-09

首先,你需要检查几个关键点来确保你的 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 的日志。

 类似资料:
  • nginx error.log日志一直报 错误,我使用pc 浏览器访问一切正常,nginx上还挂着给app访问的api接口,在app上会出现有的用户可以访问有的出问题这种情况。搜索了百度和谷歌都没找到问题所在。 https 证书是阿里云买的证书。nginx配置如下 服务器系统版本:Rocky Linux release 9.1 (Blue Onyx) nginx版本:nginx version:

  • docker+nginx部署的前后端分离项目,如果我nginx没有配置代理的话就可以打印index.html的内容但是空白页面,我一旦nginx代理了,就报系统异常,是怎么回事呀 没有启用nginx代理的情况 启用nginx代理的情况 能部署上docker前端页面也不至于空白页面呀,后端已经部署上docker上并用postman测试了能调用数据

  • 主要内容:1. 代理服务器介绍,2. 将请求传递给代理的服务器,3. 传递请求标头,4. 配置缓冲区,5. 选择传出IP地址本文介绍代理服务器的基本配置。 您将学习如何通过不同协议将NGINX请求传递给代理的服务器,修改发送到代理服务器的客户端请求标头,以及配置来自代理服务器的响应缓冲。 代理服务器的基本配置目录 代理服务器介绍 将请求传递给代理的服务器 传递请求标头 配置缓冲区 选择传出IP地址 1. 代理服务器介绍 代理通常用于在多个服务器之间分配负载,无缝地显示来自不同网站的内容,或者通过

  • Nginx 是一个高性能的 HTTP 和反向代理服务器,代码完全用 C 实现,基于它的高性能以及诸多优点,我们可以把它设置为 hyperf 的前置服务器,实现负载均衡或 HTTPS 前置服务器等。 配置 Http 代理 # 至少需要一个 Hyperf 节点,多个配置多行 upstream hyperf { # Hyperf HTTP Server 的 IP 及 端口 server

  • 我想在代理之后提供Restful API,但我不知道如何将请求重定向到Spring Boot应用程序,以便可以使用域名访问它。 我的Spring Boot应用程序使用spring-boot-starter-tomcat运行,应用程序部署良好,我可以在服务器上使用java-jar myApplication.jar部署它。 该应用程序还可以通过写入远程访问https://1.2.3.4:8090在浏

  • 我有一个包含3个容器的项目:反向代理容器(jwilder-nginx-proxy image),前端容器(nginx容器服务于Vue js开发和捆绑的应用程序)和后端容器(node6容器服务于NodeJs ExpressJs应用程序)。后端和前端都在反向代理的后面。下面是它在我的本地主机中应该如何工作: 访问http://localhost:80/并为gui服务 gui应该通过http://loc