每周一坑-nginx反向代理接口403

每周一坑-nginx反向代理接口403
  这个问题很坑(老实说我很少把话说那么满,一般只会说“比较”、“有点”),从问题出现(8月12日),掺杂了我、前端开发、我经理一起排查,终于在上周五(8月19日)解决。
  话说我们以前有个域名叫: abc.cn,nginx里面有个配置进行反向代理转发接口的,对于 https://www.abc.cn/data/xxx.js 应该转发到(proxy_pass) 到 另一个域名: http://www.123.com/data/xxx.js。
  其中,前面add_header 是用于开放跨域请求的,因为浏览器为了安全问题一般都限制了跨域访问。
  这个配置我记得是开发上去服务器自己加的,以前都是好的(就是因为以前配置是好的,所以后面我一直坚信nginx配置是没问题的,但实际上我错了)。但从8月12日开始就调不通,反馈变成了404页面,当时第一个坑事是:被调接口的域名 www.123.com 返回502(人家的网站死了,确实不关我们事),然后运营的人说先屏蔽不要让业主方发现(撇清关系)
  过了几天,这个负责  http://www.123.com/data/xxx.js 的人找我们一起联调接口,毕竟业主方觉得这个功能需要保留。
  第二个坑事:那一批 www.abc.cn 的服务器(都在天翼云上),很奇怪地,在服务器内部 curl 人家的接口不通,但在其他服务器上没问题。想不到到我现在写博客这一刻都还是不通= =。首先我已经排除过,iptables、nginx配置没加人家黑名单,跟电信WAF也确认过,他们也没有。

   再来看看一个正常的服务器(没被人拉黑的),curl这个接口应该是有返回的,所以我们后来换新服务器,域名为:www.ABC.cn

  幸好我没在这个被他们拉黑的域名做过多的尝试,找来了另一个机器去测~~~

  第三个坑事:一开始这个js调不通的时候,不知道是我们经理还是接口对接人,叫前端从js接口改做xml的接口转发,然后我配置之后返回404。404一直解决不了后,我经理还特意开发一个定时请求人家接口的jar包程序,好像是每5分钟请求一次的。。。(既然浏览器不行,那就直接通过能请求他们接口的服务器公网ip+端口形式去请求)

  现在变成:https://www.ABC.cn/data/xxx.xml  需要转到别人的: http://www.123.com/data/xxx.xml

大致是这样的,跑这个jar包的时候还不一定每次都能成功,但只要跑成功一次就可以放任不管(这个我也听得比较懵逼)。听说是人家这个接口做的不好,每5分钟内能保证请求成功一次,要恰到好处拿到他们这个点 = =

这个点就是你刷浏览器刚好刷到数据,代表jar包也能同理启动起来,没有报错。

 

   第四个坑事:不知道什么原因,突然又说从xml改回到js接口转发。此时nginx报错:HTTP ERROR 403,这个问题跟nginx配置 proxy_set_header 有关,解决参考:【https://blog.csdn.net/u013887008/article/details/119976269

  这个东西我还没仔细研究过,先记录下。大致意思是,用来重写请求头中host字段,不然会导致请求失败。

详情可以参考这个:https://www.cnblogs.com/goloving/p/13663843.html

proxy_set_header Host $http_host;

要改成:

proxy_set_header Host $proxy_host;

 

  (上面 rewrite 重定向和 proxy_pass 到百度被注释是用来做测试的,因为一直请求不到需要的接口,经理叫我试试重定向能不能生效,生效再研究反向代理)

  没搞清楚的是,为啥以前那个域名(abc.cn)这样配置(proxy_set_header Host)没问题,而现在在新域名上会用不了??

  第五个坑事,这是最后一个,从abc.cn(curl不通接口) 换域名为ABC.cn(通接口),我当时不想给ABC.cn 配置ssl 证书,因为阿里的免费整数用一个少一个 = =,想着省一点用。然而用http://www.ABC.cn 说调不通,好像说跨域,所以大家看我上面截图,location外面配了个 add_header 解决跨域问题的,如果用http去调人家接口是不通的,所以最后只能申请回ssl证书。

 

posted @ 2022-08-21 23:19  windysai  阅读(8169)  评论(0编辑  收藏  举报