• nigix代理失败的排查过程


    背景

    在刚开始迁移的过程中,由于经常进⾏部署实验,需要⽅便进⾏dns解析更换IP的操作,在预发布域名解析中申请了七层负载均衡的vip,通过vip来调整具体的解析ip

    问题

    这时问题就发⽣了,在后⼀个版本开发的过程中,前端发现部署到预发布后,所有的后端接⼝全部返回503,⽆法访问。但是直接通过后端域名可以正常调⽤所有接⼝。

    前后端分离项⽬,前后端均为独⽴部署。前端通过nginx配置将所有后端请求全部代理⾄后端服务器,对⽤户屏蔽所有后端接⼝。可实现前端暴露在公⽹环境中,⽽后端全部在内⽹环境中,最⼤限度保证了后端接⼝安全。

    分析排查

    1、后端服务

    在遇到这个问题后,⾸先检查后端服务是否有异常,通过postman直接调⽤后端api接⼝,均可正常调⽤,返回值正常。此刻说明后端服务是正常的,问题进⼀步向前排查。

    2、后端Nginx

    考虑是否在后端Nginx中漏配了server_name,导致nginx⽆法找到对应的server块但是通过检查,这部分配置也并⽆异常,并且通过查看nginx的⽇志⽂件,发现通过前端代理并没有转发到后端Nginx中。

    此时基本上已经判断为前端代理失败,进⾏进⼀步排查。

    3、Nginx saas配置平台系统

    通过联系运维,⼀起排查问题,发现配置、解析并⽆异常,因为是预发布机器,运维建议先使⽤IP直接进⾏代理,不⾛DNS解析。

    此时基本上已经确认问题就出在前端Nginx代理上,继续联系前端排查。

    4、前端Nginx

    1. log_format realaddr_54033 '$remote_addr - $remote_user [$time_local]
    2. "$http_x_forwarded_for" "$http_j_forwarded_for" '
    3. '"$request" $status $bytes_sent '
    4. '"$http_referer" "$http_user_agent" '
    5. '"$gzip_ratio" '
    6. '$request_time $upstream_response_time';
    7. server {
    8. listen 80;
    9. server_name xxx.com ;
    10. access_log /export/servers/nginx/logs/xxx.com/xxx.com_access.log realaddr_54033;
    11. error_log /export/servers/nginx/logs/xxx.com/xxx.com_error.log warn;
    12. root /export/Instances/xxx/runtime/;
    13. error_page 302 = http://www.xxx.com/error2.aspx;
    14. index index.html;
    15. location / {
    16. try_files $uri $uri/ /index.html;
    17. index index.html;
    18. root /export/Instances/xxx/runtime;
    19. }
    20. location /api {
    21. proxy_next_upstream http_500 http_502 http_503 http_504 error timeout
    22. invalid_header;
    23. proxy_set_header Host $host;
    24. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    25. proxy_pass http://xxx.com;
    26. }
    27. location /logs/ {
    28. autoindex off;
    29. deny all;
    30. }
    31. }

    通过检查前端Nginx,并在本地进⾏Nginx实验,结合np官⽅⽂档终于发现了问题:

    1. 前端的机器是公有云服务器,⽆法ping通vip⽹段,需要在Nginx中配置DNS:
    1. resolver 172.16.16.16 10.16.16.16 valid=10s;
    2. 复制代码
    1. 也是最主要的原因,在转发的时候设置了错误的Header
    1. proxy_set_header Host $host;

    这句也是最致命的问题,由于之前并没有使⽤VIP,域名解析直接到⽬标IP,所以Header中的Host属性并没有太⼤的作⽤,⽽由于配置了负载均衡VIP,需要通过Header中的Host属性找到⽬标IP,⽽这⾥设置的Host为前端的域名,使得VIP⽆法找到⽬标IP,报503错误。

    正常代理

    设置了错误的Header

    总结

    1、我们在排查域名访问报错的时候,一定要有清洗的思路排查逻辑

    2、使用了VIP转发的时候,一定要注意Header的正确配置

  • 相关阅读:
    mac os 渗透测试常用命令
    【Spring AI 来了】
    OWASP API SECURITY TOP 10
    3年测试经验,去面试连25K都拿不到了吗?现在测试这么坑?
    14、Python -- 列表推导式(for表达式)与控制循环
    golang 用户名密码认证docker,并推送镜像至仓库
    LeetCode-剑指68-II.二叉树的最近公共祖先
    oracle 表空间详解以及配置操作
    前后端都用得上的 Nginx 日常使用经验
    (多级缓存)缓存同步
  • 原文地址:https://blog.csdn.net/LBWNB_Java/article/details/127047971