IIS实现Nginx功能:转发
这个标题本身是不合理的,但是基于目前公司有一份系统是外部代理商贴牌使用,有一个老的站点是部署在IIS上,好多代理商自己的域名绑定在这个上面,而近期新版本的系统已经上线,那么需要将这些域名也转发到新的站点上。目前有两个问题:(1)这台服务器无法去安装Nginx,因为需要占用80端口,那么服务器上的所有站点都需要重新配置,我们的业务场景要求我们不能随意停机维护;(2)解析到别的服务器用nginx转发,因为也讲到了,这个站点上绑定了很多自定义的域名,要通知客户去更新解析是一件很难的事情。
这样一来就想到了是否可以用IIS来实现Nginx的功能,经过网络搜索,试验,最终确实可行,以下即为响应的流程:
1. 检查IIS是否支持
如没有,则先下载ARR 和 URL Rewrite 进行安装,使用过程中发现ARR对IIS的“目录浏览”功能有依赖(未验证,如果无法使用,可以查看一下是否安装了“目录浏览”功能):
【Application Request Routing】 http://www.iis.net/downloads/microsoft/application-request-routing#additionalDownloads
【URL重写】http://www.iis.net/downloads/microsoft/url-rewrite#additionalDownloads
PS:安装会导致IIS重载,会有那么几秒钟的闪停!!!
2. 开始配置
双击IIS根目录
双击Application Request Routing Cache
双击右边的 Server Proxy Settings
勾上 Enable proxy
取消勾选“Reverse rewrite host in response headers”,否则所有的响应内容的host都会被重写为当前站点域名,简单来讲,最直接的影响就是对外部站点的重定向都会失败,所以这里取消勾选。
点击“应用”后,新建一个站点,用来接受请求做转发
双击站点,双击 URL Rewrite -> Add Rules(新建规则) -> Blank rule(空白规则)
Name:填写你的规则名称
Match URL 是匹配Requested URL的规则
http://www.test.com?name=michael&age=30
host: www.test.com
requested url: ?name=michael&age=30
query string: name=michael&age=30
Requested URL 选择 Matches the Pattern (匹配符合规则的url)
Using 选择 Regular Expressions (使用正则表达式来匹配)
Pattern 里填写 ^(.*) 这里不对正则表达式做讲解,有需要的可以自己了解。
勾选 Ignore case 忽略大小写
展开 Conditions 条件筛选
Logical grouping 选择 Match Any
Match All 是列表中所有规则都要匹配才符合(与)
Match Any 是列表中有一个规则匹配就算符合(或)
track capture group across conditions 跟踪捕获组,这个功能跟正则有关,这里不需要不勾选,可以查询关键词 capture group 自行了解详情
点击 Add 添加条件
Condition input 填写 {HTTP_HOST} ,HTTP_HOST 代表请求头里的host,就是上面例子里的 www.test.com 部分, 更多可过滤条件查询 Server Variables 自行了解
Check if input string 选择 Matches the Pattern
Pattern 填写 ^arrtest.com$ ,这里的意思是如果host是 arrtest.com 则匹配通过,例:http://arrtest.com?asdf=1234
如果这里填写的是 ^www.arrtest.com$ ,则匹配 http://www.arrtest.com?asdf=1234
勾选 Ignore case 忽略大小写
双击展开 Action 部分
Action type 选择 Rewrite 重写转发
Rewrite URL 里填写 https://cn.bing.com/{R:1} 转发目标地址, {R:1} 代表 Match URL 部分匹配到的 Request URL
勾选 Append query string 追加查询字符串
到此配置结束,保存这个规则,在浏览器访问 http://arrtest.com/search?q=测试 就等同于访问 https://cn.bing.com/search?q=测试
为了防止该站点下的其他接口被这个规则无脑转发,我们需要新增一个转发条件
现有的需要转发的 API 格式如下 http://arrtest.com?PROTOID=123456
其他接口是没有 PROTOID 这个关键词的,并且 PROTOID 后面的value都是数字,那么这里就用这个关键词来过滤需要转发的请求
再回到刚刚的 Conditions 部分,点 Add 新增条件
Condition input 填写 {QUERY_STRING}
Check if input string 选择 Matches the Pattern
Pattern 填写 PROTOID=\d+ 这个规则的意思是,匹配查询字符串为 PROTOID 开头参数值为数字的请求(例:http://arrtest.com/?PROTOID=456789)
勾选 Ignore case 忽略大小写
确定保存,修改 匹配逻辑为 Match All (与),列表内所有的规则都匹配,请求才会通过
现在只有 QueryString 为 PROTOID 开头参数值为数字的请求才会被转发了
例子:http://arrtest.com/search?PROTOID=4564&q=测试 => http://cn.bing.com/search?PROTOID=4564&q=测试
http://arrtest.com/search?q=测试&PROTOID=4564 则不会被转发
至此请求转发的功能就实现了,除此之外,强大的 ARR + URL Rewrite 还可以实现高可用负载均衡。
IIS实现Nginx功能:转发的更多相关文章
- 10分钟学会windows中iis搭建服务器集群实现负载均衡和nginx代理转发
前言 我们之前聊过 10分钟搭建服务器集群--Windows7系统中nginx与IIS服务器搭建集群实现负载均衡:https://www.cnblogs.com/xiongze520/p/103087 ...
- Nginx功能介绍
Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的. 从2004年发布至今,凭借开元的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也可作 ...
- Nginx 路由转发配置(转)
Nginx 路由转发配置笔记 由于预算有限,只有一台服务器,想要玩的东西不少,所以这个台服务器上会提供多重服务,因此涉及到的nginx转发就必有重要了 由nginx做请求代理,提供多种服务 php搭建 ...
- 防止aspx木马的IIS SPY变态功能
防止aspx木马的IIS SPY变态功能 如果服务器支持aspx语言,而且被上传了aspx木马,利用木马里面的IIS SPY 功能,可以读出IIS里面的所有用户的密码,包括用IIS做FTP的,也能读出 ...
- Nginx功能展示实验
Nginx功能展示实验 Nging可以作为反代服务器:也可以作为负载均衡器,并自带根据对后端服务器健康状态检测具有增删服务器的功能:也可以作为纯Web服务器,提供Web服务. 本实验将使用Nginx实 ...
- Nginx代理转发Apache+svn
1.安装svn和httpd yum install httpd yum install subversion mod_dav_svn 创建仓库目录 mkdir -p /var/www/svn 3.创建 ...
- 使用Nginx做转发和匹配替换
Nginx是一个强大的服务器软件,由于处理数据内容处于第七层协议应用层的原因,所以获取的数据也比较完整: Nginx做转发: 这个很简单,vi nginx.conf(编辑nginx配置文件) 添加lo ...
- nginx 端口转发
nginx 端口转发 默认nginx监听的端口是8080,想通过配置nginx访问80直接跳转到nginx,以下是配置方法: [root@localhost vhost]# cat tomcat.jo ...
- Apache 后台服务器(主要处理php及一些功能请求 如:中文url) Nginx 前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求) Lighttpd 图片服务器 总体来说,随着nginx功能得完善将使他成为今后web server得主流。
Apache 后台服务器(主要处理php及一些功能请求 如:中文url) Nginx 前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求) Lighttpd 图片服务器 总体来说,随着ngi ...
随机推荐
- C#LeetCode刷题-哈希表
哈希表篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 42.8% 简单 3 无重复字符的最长子串 24.2% 中等 18 四数之和 ...
- Vue 如何优雅的根据条件动态显示组件
常规情况下,在里动态加载不同组件的方式为: <template> <!-- 符合条件A,加载组件A --> <BusinessComponentA v-if=" ...
- Vscode+Picgo+github+Markdown Preview Enhanced实现Markdown一键上传图床以及导出pdf文件
目录 安装Vscode 安装及配置Picgo插件 安装Markdown Preview Enhance 安装Vscode 安装Vscode(不解释了) 安装及配置Picgo插件 在github中新建仓 ...
- ROS 八叉树地图构建 - 给 octomap_server 增加半径滤波器!
为了在每帧点云中滤除噪声点,选择了半径滤波器,也用高斯滤波器测试过,但是没有半径效果好,这里记录下在 octomap_server 中增加半径滤波器的步骤,并在 launch 中配置滤波器参数. 一. ...
- 微信小程序对接通联支付
1.首先拿到通联支付开发API:https://aipboss.allinpay.com/know/devhelp/main.php?pid=15#mid=92 2.如果注册通联或者企业认证工作请到: ...
- CardView之可切换式卡片
今天我所要作的笔记是: 可切换式的卡片CardView. Java代码部分 1.我们要根据自己的当前版本号添加相对应的一个依赖: implementation 'com.android.support ...
- 网络基础之IP地址
一.IP地址 1.IP地址就是给互联网上每一台主机 (或路由器)每一个接口分配一个在全世界范围内是唯一的32位二进制的地址标识符.现在由互联网名字和数字分配机构ICANN进行分配. 2.转换成十进制 ...
- 如何理解Vue.js中的ref及$ref,$
1.vue官方文档 首先我们来看一下vue官方是怎么解释的 好了,我知道很多刚接触的vue的小白其实都不太看的懂官方文档在讲什么,下面我用自己的话翻译一下. 2.ref以及$ref 通过 ref 标注 ...
- 如何在Linux上使用scp命令进行服务器之间的文件/目录传输
1. 本地上传文件到远程: scp [local_file_path] [username]@[server_ip]:[remote_dir] 2. 本地上传目录到远程: scp -r [local_ ...
- 6. 二十不惑,ObjectMapper使用也不再迷惑
一滴水,用显微镜看,也是一个大世界.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众 ...