• docker部署前后端分离项目


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 旧故-1 2024-04-13 15:08 采纳率: 0% 浏览 4 首页/ PHP / docker部署前后端分离项目 nginxdocker运维 docker部署nginx和后端多服务,nginx代理的是网关8080端口,目前项目访问就404,http://172.16.15.47:1889/api/blade-system/tenant/info?domain=http:%2F%2F172.16.15.47:1889 ,api接口路径代理路径 http://172.16.15.47:8080/proxy_pass http://172.16.15.47:8080/; 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    7条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-13 15:08
      关注

      引自免费微信小程序:皆我百晓生

      首先,为了确保问题的准确解决,我们需要确认几个关键点:

      1. 你的Docker容器配置是否正确。
      2. Nginx配置文件中的location块设置是否恰当。

      这里我会提供一个基本的Nginx配置示例,用于将前端应用和后端API分离开。请根据实际情况调整这个配置。

      假设你的前端应用运行在80端口,而后端API运行在8080端口。首先,你需要为每个服务创建一个Dockerfile,并构建镜像。例如,对于前端应用(假设使用Node.js)的Dockerfile可能如下所示:

      # 使用官方Node.js基础镜像
      FROM node:14-alpine
      
      WORKDIR /app
      
      COPY package*.json ./
      RUN npm install
      
      COPY . .
      
      EXPOSE 80
      
      CMD ["npm", "start"]
      

      对于后端API(假设使用Java Spring Boot)的Dockerfile可能如下所示:

      # 使用官方Java基础镜像
      FROM openjdk:8-jdk-alpine
      
      ARG JAR_FILE=target/my-api.jar
      
      COPY ${JAR_FILE} app.jar
      
      ENTRYPOINT ["java","-jar","/app.jar"]
      

      接下来,为每个服务创建一个Docker-compose.yml文件,分别启动前端应用和后端API。

      version: '3'
      services:
        frontend:
          build: ./frontend
          ports:
            - "80:80"
      
        backend:
          build: ./backend
          ports:
            - "8080:8080"
      

      然后,在主机上创建一个名为nginx.conf的Nginx配置文件,内容如下:

      worker_processes auto;
      error_log /var/log/nginx/error.log warn;
      pid /var/run/nginx.pid;
      
      events {
          worker_connections 1024;
      }
      
      http {
          include       /etc/nginx/mime.types;
          default_type  application/octet-stream;
      
          log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" "$http_x_forwarded_for"';
      
          access_log  /var/log/nginx/access.log  main;
      
          sendfile        on;
          #tcp_nopush     on;
      
          keepalive_timeout  65;
      
          #gzip  on;
      
          server {
              listen       80;
              server_name  localhost;
      
              location / {
                  root   /usr/share/nginx/html;  # 假设这是你的静态资源目录
                  index  index.html index.htm;
                  try_files $uri $uri/ /index.html;
              }
      
              location /api/ {
                  proxy_pass http://localhost:8080/;  # 这里是后端API的地址
                  proxy_set_header Host $host;
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header X-Forwarded-Proto $scheme;
              }
          }
      }
      

      保存上述配置文件后,执行以下步骤来启动整个环境:

      1. 在前端应用目录下,运行docker-compose up -d来启动前端应用。
      2. 在后端API目录下,运行docker-compose up -d来启动后端API。
      3. 最后,在Nginx所在的主机目录下,启动Nginx:nginx -c nginx.conf

      现在你应该可以通过http://172.16.15.47/访问前端应用,而API请求应该通过http://172.16.15.47/api/blade-system/tenant/info?domain=http:%2F%2F172.16.15.47:1889被代理到后端服务。

      如果你仍然遇到问题,请检查日志文件(Nginx的日志位于/var/log/nginx/error.log),它可能会提供关于错误的更多细节。同时,请确保你的后端API确实监听了8080端口,并且可以响应来自Nginx的请求。

      展开全部

      评论 编辑记录
    • 码农阿豪 Java领域优质创作者 2024-04-13 15:08
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      问题:如何解决docker部署nginx和后端多服务,nginx代理的是网关8080端口,项目访问404的问题? 解答: 步骤1:检查nginx配置文件 首先检查nginx配置文件是否正确,特别是代理路径和proxy_pass指令是否正确。 案例:
      location /api/ {
          proxy_pass http://backend:8080/;
          ...
      }
      

      步骤2:检查后端服务的端口和路径
      确认后端服务所在的容器是否已经启动,并且监听的端口号和api接口路径是否正确。 案例:

      docker run --name backend -p 8080:8080 -d backend-image
      

      步骤3:检查防火墙设置
      在防火墙上检查是否允许了来自外部网络的访问,需要打开对应端口的入站流量。 案例:

      sudo firewall-cmd --permanent --add-port=8080/tcp
      sudo firewall-cmd --reload
      

      步骤4:确认主机IP和端口是否正确
      最后,确认访问项目的IP和端口是否正确。 案例:

      curl http://172.16.15.47:8080/api/blade-system/tenant/info?domain=http:%2F%2F172.16.15.47:1889
      
      评论
    • 专家-百锦再 全栈领域优质创作者 2024-04-13 15:09
      关注

      问题描述: 
      在docker中部署了nginx和多个后端服务,nginx代理的是网关8080端口。目前访问项目时出现404错误。
      要求:
      请使用markdown格式输出结果。

      根据问题描述,可能出现404错误的原因有以下几点:

      1. Nginx配置错误:检查Nginx配置文件中的proxy_pass路径是否正确,确保代理的路径配置正确。
      2. 后端服务未启动:确保后端服务在Docker容器中已经正确启动。
      3. 网关配置问题:可能是网关配置不正确导致访问出现404错误。

      针对这些可能的原因,需要逐一排查并解决。如果需要进一步的代码示例或帮助,请提供更多细节信息。


      有问题你别着急,评论留言都可以,看到马上就回复,尽量及时补充齐
      评论
    • stormsha 2024-04-13 15:12
      关注

      根据您提供的信息,您正在使用Docker部署Nginx和后端多服务,Nginx代理的是网关8080端口,但目前项目访问时出现404错误。以下是一些可能的解决方案:

      检查Nginx配置

      1. 确保Nginx配置文件中的代理路径和API接口路径正确无误。您可以检查Nginx配置文件中的server块,确保location指令中的路径与您的API接口路径匹配。

      2. 检查proxy_pass指令中的URL是否正确。确保URL中的IP地址、端口和路径与您的后端服务匹配。

      检查后端服务

      1. 确保您的后端服务正在运行并且可以通过8080端口访问。您可以使用docker ps命令查看正在运行的容器,并使用docker logs命令查看容器的日志以查找任何错误。

      2. 如果您的后端服务使用不同的端口,请确保在Nginx配置文件中正确指定了这些端口。

      检查网络连接

      1. 确保您的Docker容器之间可以互相通信。您可以使用docker network inspect命令查看容器之间的网络连接。

      2. 如果您的后端服务在不同的网络中,请确保在Nginx配置文件中正确指定了这些网络。

      检查API接口路径

      1. 确保您的API接口路径正确无误。您可以使用工具(如Postman)来测试API接口,以确保它们返回预期的结果。

      2. 如果您的API接口路径包含参数或查询字符串,请确保在Nginx配置文件中正确处理了这些参数。

      检查Nginx日志

      1. 查看Nginx的错误日志(通常位于/var/log/nginx/error.log),以查找任何与404错误相关的信息。这可以帮助您确定问题的根本原因。

      通过检查这些方面,您应该能够找到并解决导致404错误的问题。如果问题仍然存在,请提供更多详细信息,例如Nginx配置文件的内容和后端服务的日志,以便进一步调查。

      评论
    • GISer Liu 2024-04-13 15:13
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      首先,问题描述中提到的情况是前后端分离项目的部署问题,使用了Docker部署,其中Nginx作为反向代理,代理的是网关8080端口,但是访问时遇到了404错误。根据描述,需要将API接口路径代理到后端多服务的地址。
      针对这个问题,我会提出以下解决思路和方案:

      1. 检查Nginx配置文件 :首先,需要检查Nginx的配置文件,确认代理设置是否正确。特别是要确保代理的路径和后端服务的地址配置正确。
      2. 确认后端服务是否正常运行 :检查后端服务是否正确运行,确保后端服务没有问题。可以尝试直接访问后端服务的API接口,确认是否可以正常访问。
      3. 调整Nginx配置 :根据问题描述,需要将API接口路径代理到后端多服务的地址。可以通过修改Nginx的配置文件,添加合适的location配置来实现代理。例如:
        nginxCopy code
        location /api/ {
        proxy_pass http://后端服务地址;
        }
        
        这样配置可以将以/api/开头的请求代理到指定的后端服务地址。
      4. 重启Nginx服务 :配置文件修改后,需要重新加载或重启Nginx服务,使配置生效。
      5. 测试访问 :完成配置修改后,进行测试,尝试访问API接口,确认是否可以正常访问。
      6. 查看Nginx日志 :如果问题仍然存在,可以查看Nginx的错误日志,以获取更多信息,帮助进一步排查问题。
        综上所述,通过检查Nginx配置、确认后端服务运行情况、调整Nginx配置、重启Nginx服务等步骤,可以解决前后端分离项目在Docker部署中遇到的404错误问题。

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      评论
    • CSDN-Ada助手 CSDN-AI 官方账号 2024-04-13 18:02
      关注

      【相关推荐】




      如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
      评论
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-16 13:25
      关注

      下午好🌅🌅🌅
      本答案参考ChatGPT-3.5

      好的,针对这个问题,我可以给您提供以下解决方案:

      1.检查容器端口映射是否正确,容器内部监听端口与宿主机器端口是否一一对应,可以通过以下命令查看:

      docker ps -a
      

      2.检查nginx配置文件是否正确,确认代理设定是否准确,可以检查以下地方:

      • nginx配置文件中的upstream是否正确,upstream是代理后端服务的配置块
      • 配置在location中的proxy_pass是否正确,即代理到哪个地址
      • 检查后端服务的地址是否正确

      3.检查客户端访问地址是否正确,确认访问路径是否正确。

      针对您的具体问题,可以参考以下配置文件进行修改:

      server {
          listen 80;
          server_name yourdomain.com;
      
          location /api/ {
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_pass http://your_backend_ip:8080/;
          }
      }
      

      如果依旧无法解决问题,可以提供更多的日志信息进行排查,排查nginx访问日志,后端服务日志以及docker容器日志等信息。

      希望对您有所帮助。

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    数据结构——队列
    GBase 8c 硬件检查异常修复
    geoserver2.18(8):添加CSW(网络目录服务)扩展及前端开发调用
    软件工程毕业设计课题(50)微信小程序毕业设计JAVA校园浴室预约小程序系统设计与实现
    第十一周周报
    交换机基础知识之安全配置
    Markdown 字体变红色,2种办法
    ICML 2019 | SGC:简单图卷积网络
    KKVIEW远程控制: 远程控制APP下载
    阿里十五位顶级架构师联合编写的《微服务架构解析手册》大厂面试必问
  • 原文地址:https://ask.csdn.net/questions/8087843