https访问站外http资源,nginx配置根据参数转发

2021年11月22日 阅读数:4
这篇文章主要向大家介绍https访问站外http资源,nginx配置根据参数转发,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

需求:
因浏览器安全策略,在reference为https类型时,没法跳转获取http协议连接的数据。
所以,设计解决方案为:由程序将须要跳转的完整url做为参数pic_url的值,加入整个url内,因此须要在代理中实现中转,将请求转发给pic_urlnginx

url:
原:
https://n1-test.xxx.com/angentImg/?type=image&pic_url=http://www.wipo.int/branddb/jsp/data.jsp?SOURCE=EMTM&TYPE=jpg&KEY=014835301&qi=2-FbonCURiPwm/abnckAV浏览器

但愿转发给:
http://www.wipo.int/branddb/jsp/data.jsp?SOURCE=EMTM&TYPE=jpg&KEY=014835301&qi=2-FbonCURiPwm/abnckAV安全

实现方法:ruby

    location ~/angentImg/ {
      if ($query_string ~*  ^(.*)type=image&pic_url=(.*)$){
         set $pic_url $2;
         # set $pic_url $arg_pic_url
         proxy_pass $pic_url;
         }
    }

解释:  
1.set $1 $2 将$2变量的值赋值给$1变量
2.arg_(VAR_NAME)用来获取url后指定参数对应的值,好比arg_pic_url能够获取到链接中pic_url这个参数的值
3.$query_string 能够获取路径以后包含全部参数kv的string
4.可是若是要获取的参数自己也是一个url,且该url包含有自带的参数,例如在这个例子里,直接使用$pic_url只能捕获http://www.wipo.int/branddb/jsp/data.jsp?SOURCE=EMTM这一段值,它后方的&以后的参数是没法捕捉到。所以使用正则匹配,将pic_url=后方的字符串所有赋予给了变量$2,将流量转发向$2值的url

配置完上面这些后,发现连接仍是没法打开,报错502:bash


这里写图片描述

怀疑目标url作了防盗链处理,但通过测试,这是个cdn地址,并无配置防盗链,继续检查,发现nginx日志有异常记录:服务器


这里写图片描述

域名没法解析?dns已经配置了呀,本地也是能够浏览器正常访问该图片url,尝试在nginx服务器上添加/etc/hosts 固定dns记录,发现依然有一样的报错,求助万能的google,找到了问题的缘由:jsp

在Ngnix中若是用变量做为反向代理的地址时,可能会出现“no resolver defined to resolve xxx.xxx”的问题,缘由是 Nginx 0.6.18之后的版本中启用了一个resolver指令,在使用变量来构造某个server地址的时候必定要用resolver指令来指定DNS服务器的地址,因此解决这个问题的方法很简单:在nginx的配置文件中的http{}部分添加一行DNS解析便可,注意,要写在nginx配置的http{}内:svg

resolver 8.8.8.8 ipv6=off;

再次尝试,图片能够正常访问,检查浏览器控制台能够看到各项url参数均正常携带:测试


这里写图片描述

原文地址:https://blog.csdn.net/ywq935/article/details/81984878google

本文同步分享在 博客“吟风者”(JianShu)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。