前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx配置根据参数转发

nginx配置根据参数转发

作者头像
吟风者
修改2023-09-23 18:29:54
6.8K0
修改2023-09-23 18:29:54
举报
文章被收录于专栏:吟风者吟风者

需求: 因浏览器安全策略,在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

实现方法:

代码语言:javascript
复制
    location ~/angentImg/ {
      if ($query_string ~*  ^(.*)type=image&pic_url=(.*)$){
         set $pic_url $2;
         # set $pic_url $arg_pic_url
         proxy_pass $pic_url;
         }
    }
代码语言:javascript
复制
解释:  
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{}内:

代码语言:javascript
复制
resolver 8.8.8.8 ipv6=off;

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

这里写图片描述

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档