美文网首页
https访问站外http资源,nginx配置根据参数转发

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

作者: 吟风者 | 来源:发表于2020-10-17 23:09 被阅读0次

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

    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

    实现方法:

        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:


    这里写图片描述

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


    这里写图片描述

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

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

    resolver 8.8.8.8 ipv6=off;
    
    

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


    这里写图片描述

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

    相关文章

      网友评论

          本文标题:https访问站外http资源,nginx配置根据参数转发

          本文链接:https://www.haomeiwen.com/subject/alhqmktx.html