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

  log_format realaddr_54033 '$remote_addr - $remote_user [$time_local]
           "$http_x_forwarded_for" "$http_j_forwarded_for" '
           '"$request" $status $bytes_sent '
           '"$http_referer" "$http_user_agent" '
           '"$gzip_ratio" '
           '$request_time $upstream_response_time';
   server {
       listen 80;
       server_name xxx.com ;
       access_log /export/servers/nginx/logs/xxx.com/xxx.com_access.log realaddr_54033;
       error_log /export/servers/nginx/logs/xxx.com/xxx.com_error.log warn;
       root /export/Instances/xxx/runtime/;
       error_page 302 = http://www.xxx.com/error2.aspx;
       index index.html;
       location / {
               try_files $uri $uri/ /index.html;
       index index.html;
       root /export/Instances/xxx/runtime;
}
       location /api {
           proxy_next_upstream http_500 http_502 http_503 http_504 error timeout
                   invalid_header;
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_pass http://xxx.com;
       }
       location /logs/ {
               autoindex off;
       deny all;
}
   }

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

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

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

正常代理

设置了错误的Header

总结

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果安装宝塔的 nginx 失败了,你可以尝试以下几个步骤来解决问题: 1. 检查你的服务器是否满足宝塔 nginx 的系统要求,确保你的服务器上已经安装了必要的环境。 2. 检查你是否已经安装了宝塔的所有依赖包,确保你的服务器上安装了所有必要的软件包。 3. 如果你使用的是虚拟主机或者共享主机,请确保你有权限安装 nginx。 4. 如果你正在使用宝塔的一键安装脚本,请确保你的服务器能够访问宝塔的软件源。 5. 如果你手动安装 nginx,请确保你已经正确配置了 nginx 的编译参数。 6. 如果以上步骤都没有解决问题,请尝试重新安装宝塔,或者提交工单请求宝塔客服帮助解决问题。 ### 回答2: 宝塔面板是一款非常方便的服务器管理工具,但有时候在安装nginx时可能会遇到一些问题导致失败。以下是一些可能的解决方案: 1. 检查网络连接:确保服务器能够正常连接到互联网,并且没有任何防火墙或代理服务器阻止了连接。 2. 检查系统依赖:nginx需要一些系统依赖库的支持,比如openssl、pcre等。可以通过执行命令"yum install -y openssl pcre-devel"来安装这些依赖库。 3. 检查系统资源:如果服务器资源不足,也可能导致宝塔nginx安装失败。可以通过执行命令"free -m"来查看服务器的内存使用情况,确保内存足够。 4. 检查宝塔面板版本:更新到最新版本的宝塔面板可能会修复一些已知的安装问题。可以到宝塔官网上下载最新版本并按照官方文档进行更新。 5. 手动安装:如果以上方法都没有解决问题,可以尝试手动安装nginx。可以到nginx官网上下载最新版本的源码包,然后按照官方文档进行编译和安装。 总之,解决宝塔nginx安装失败的关键是找出失败的原因,并根据具体情况采取相应的解决措施。如果仍然无法解决问题,建议向宝塔官方或者相关技术论坛寻求帮助。 ### 回答3: 如果宝塔面板上安装nginx失败,可以尝试以下几个解决方法: 1. 更新宝塔面板:打开宝塔面板,点击左侧菜单的“软件商店”选项,找到nginx,点击右上角的“更新”按钮,等待更新完成后重新安装。 2. 检查服务器配置:确保你的服务器配置符合nginx的最低要求。查看服务器的操作系统版本、内存、CPU等是否满足nginx的安装要求。 3. 检查端口是否被占用:在安装nginx之前,需要确保服务器的80端口没有被其他程序占用。可以使用命令行输入“netstat -ano | findstr :80”命令查看80端口是否被占用,如果被占用可以关闭占用该端口的程序或修改nginx配置文件中的监听端口。 4. 检查网络连接:安装nginx需要从宝塔面板的软件商店下载安装文件,如果你的服务器网络连接不稳定或带宽不足,可能导致安装失败。可以尝试多次安装,或者使用下载工具提高下载速度。 5. 查看错误日志:宝塔面板安装软件时会有错误日志记录,可以在宝塔面板的“日志记录”选项中找到相关的错误日志进行排查。 如果以上方法都不能解决问题,可以尝试在宝塔官方论坛或社群中寻求帮助,提供详细的错误信息和安装环境,以便其他用户或开发者帮助你解决安装失败的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值