• 使用Nginx后,前端无法接收到后端返回的数据


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 GKing是桂老大的意思 2024-06-10 17:55 采纳率: 0% 浏览 39 首页/ 编程语言 / 使用Nginx后,前端无法接收到后端返回的数据 javajavascriptnginx 使用Nginx时遇到的一些问题 是这样的,我手上有两个spring系统,系统A和系统B,系统A中包含了登录校验等功能,系统B是从系统A中抽离出来的部分业务,系统B的登录授权需要在后台中调用系统A中暴露出来的接口,在没有使用Nginx时,两个系统的所有的业务逻辑都是正常的。在使用Nginx后,系统A是正常的,系统B前端无法接收到后端发送过来的数据。 查看两个系统的后台日志,以及尝试try catch捕获错误,都是正常的,没有问题,返回给前端的数据打印查看,也是预期得到的。 以下是系统B的Nginx server块的配置 以下是系统B的前端请求错误 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    3条回答 默认 最新

    • cappnnio007 2024-06-18 14:03
      关注

      检查nginx 7034的配置

      img

      评论
    • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-10 17:55
      关注

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

      从你提供的信息来看,问题可能出在Nginx的配置上,尤其是代理设置或超时设置。虽然系统A和系统B在Nginx介入前能正常通信,但在Nginx介入后,系统B的前端出现了超时错误。这通常意味着前端请求到后端的响应时间超过了设定的超时限制。

      解决方案

      1. 检查Nginx配置中的超时参数

      Nginx有多个超时相关的配置,包括proxy_read_timeoutsend_timeout,这些参数控制了Nginx处理请求和响应的时间限制。你需要检查并适当调整这些参数,确保它们足够长,以便后端服务可以完成响应。

      示例配置:

      server {
          listen 7033;
          server_name localhost;
          location / {
              proxy_pass http://localhost:7733;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              real_ip_header X-Real-IP;
              # 添加CORS头
              add_header 'Access-Control-Allow-Origin' '*';
              add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
              add_header 'Access-Control-Allow-Headers' 'Origin, Content-Type, Accept';
      
              # 调整超时参数
              proxy_read_timeout 180s; # 默认为60s,可根据实际需求调整
              send_timeout 180s;      # 同样,根据实际需求调整
          }
      }
      

      2. 检查后端服务响应时间

      确认系统A处理请求的实际时间是否接近或超过默认的超时时间。如果后端处理时间过长,可能需要优化后端服务性能,比如数据库查询、缓存策略等。

      3. 检查网络延迟

      Nginx与后端服务之间的网络延迟也可能导致超时。确保Nginx服务器与后端服务之间的网络连接稳定且延迟低。

      4. 前端请求超时设置

      前端请求库(如axios)也有自己的超时设置,确保其与Nginx的超时设置相匹配。例如,如果你将Nginx的proxy_read_timeout设置为180秒,那么前端请求的超时时间也应该大于这个值。

      示例代码:

      axios.defaults.timeout = 181000; // 设置为比Nginx超时时间稍长一点
      

      5. 使用日志排查

      增加Nginx的日志级别,观察是否有其他错误或警告信息可以帮助定位问题。

      示例配置:

      log_format custom_format '$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 custom_format;
      error_log /var/log/nginx/error.log warn;
      

      通过以上步骤,你应该能够诊断并解决前端接收不到后端数据的问题。如果问题仍然存在,可能需要更详细的日志或进一步检查网络环境。

      展开全部

      评论 编辑记录
    • 阿里嘎多学长 2024-06-10 17:55
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      从您提供的信息来看,问题可能出在几个方面:

      1. 超时问题:前端请求超时,错误信息显示"timeout of 15000ms exceeded",这表明请求在15秒内没有得到响应。这可能是由于网络问题、服务器处理时间过长或者配置不当导致的。

      2. CORS问题:前端请求被后端服务器拒绝,这可能是因为跨源资源共享(CORS)策略没有正确配置。您在Nginx配置中添加了CORS相关的头信息,但可能存在格式错误或遗漏。

      3. Nginx代理配置:Nginx的代理配置可能存在问题,导致请求没有正确转发到后端服务。

      解决步骤:

      1. 检查超时设置

      • 确认Axios请求的超时设置是否合理。如果服务器处理时间较长,可以考虑增加超时时间。

      2. 检查CORS配置

      • 根据您提供的Nginx配置截图,CORS相关的配置存在一些格式问题。以下是一些可能的修正:

        • Access-Control-Allow-Origin 应该是 Access-Control-Allow-Origin "*"
        • Access-Control-Allow-Methods 应该是 Access-Control-Allow-Methods "GET, POST, OPTIONS"
        • Access-Control-Allow-Headers 应该是 Access-Control-Allow-Headers "origin, Content-Type, Accept"

        修正后的配置可能如下:

        add_header "Access-Control-Allow-Origin" "*";
        add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS";
        add_header "Access-Control-Allow-Headers" "origin, Content-Type, Accept";
        

      3. 检查Nginx代理配置

      • 确保proxy_pass指令正确指向了后端服务的地址。
      • 检查proxy_set_header指令是否正确设置,特别是HostX-Real-IP

      4. 检查后端服务

      • 确认后端服务能够处理请求,并且没有内部错误导致处理超时。

      5. 网络和防火墙设置

      • 检查网络连接和防火墙设置,确保没有网络问题导致请求超时。

      6. 日志和调试

      • 查看Nginx的访问日志和错误日志,获取更多关于请求失败的信息。
      • 使用浏览器的开发者工具查看网络请求的详细信息。

      代码实现和参考资料

      希望这些信息能帮助您解决问题。如果问题仍然存在,可能需要更详细的日志信息来进行进一步的诊断。

      展开全部

      评论 编辑记录
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    服务器重启后的故障原因排查
    从Mpx资源构建优化看splitChunks代码分割
    ACL2022文章
    代码检查 pre-commit如何使用
    区块链与哈希函数
    红绿灯思维
    供应商绩效管理:如何衡量以及衡量什么指标?
    前端周刊第十六期
    基于Java+SpringBoot+Vue宠物领养系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】
    看看redis的数据结构你都知道哪些
  • 原文地址:https://ask.csdn.net/questions/8116572