昨天在域名解析时直接使用隐性URL遇到了问题,主要是解析为url后,子目录无法调用,因为隐性url就是使用了iframe把目标网页嵌入了而已。 在网上搜索,发现大量的iis网站,可以使用主机头来区分。可是我的ECS上面有IIS、NodeJS和Python等各种不同的网站,不都是IIS网站,怎么办?
搞了半天想出个关键词,“iis apache”,发现有两者共存的文章,再找其中提到的代理方式,一搜果然有内容。大多数都是使用nginx、apache或tomcat做代理的。遂决定使用nginx。就下载下来,接着在网上搜它的配置教程,慢慢发现nginx的windows版本并不比iis强,还不如直接使用iis来做。就又找了IIS做代理的教程。
这方面教程很多,内容大同小异,可惜的是我按着做没有成功的。可能是Server 2012 R2上面的IIS8.5跟以前的版本有什么不同吧。
半天无果。后来看到IIS上面不是新添加了个Server Farms图标嘛,看看是不是跟它有关。就在网上搜“iis 反向代理 server farms”,结果还真找到一篇使用IIS ARR实现Lync反向代理 跟着里面的方法做,还是不行。又折腾也半天,已经过去3个多小时了。发现人家教程里面有个IIS的默认网站Default Web Site,而且绑定端口是80。我的当时已经被删除了,又给它恢复了一下。再试就可以了。
最后总结一下整个过程。
在域名解析控制台将子域名都指向主机IP
IIS需要安装arp插件,下载地址。安装后IIS显示如下,多出三项东西
双击Application Requet Routing Cache,在右侧找到Server Proxy Setting
在里面选上Enable Proxy,应用
在左侧Server Farms右击,选择Create Server Farms
填写名称,下一步
填写要代理的主机地址,advanced settings中,填写要代理的http端口httpPort,https端口httpsPort,完成
依次创建几个Server Farms,用于代理不同的服务
返回主页中双击URL重写
由于这里未用到https,所以把其中的SSL结束的删除
双击某一项打开详细信息。使用正则表达式进行匹配,模式为^(.*)
在下面条件中,添加。条件输入{HTTP_HOST},模式为 ^外部使用的服务地址(这里为域名)$,确定 向下走,在操作中,选择操作类型为重写,重写URL为http://代理的服务地址:代理的服务端口/{R:1},应用
按相同方法配置刚才创建的其他规则,主要配置工作结束。
在浏览器使用已配置的域名打开网站
以下为一些备选的配置
选择某一个Server Farm,选择Caching,配置是否启用磁盘缓存
选择Proxy,配置代理请求超时时间
选择Routing Rules,配置是否启用SSL卸载