web.config - IIS下的反向代理
实现IIS环境下,对seafile服务器的反向代理。
web.config - IIS下的反向代理
1 问题由来
从CentOS迁移到了Windows Server,网站服务器也从Nginx换到了IIS。
简单的网站设置,IIS十分简单,而且逻辑清晰,但涉及到地址重写,如:Seafile服务器分别工作在8000和8082端口。要针对Seafile服务服务器建立站点就有些困难,而且Seafile官方文档对Windows Server的介绍很少,只有基本的环境搭建,没有介绍如何在IIS下进行域名绑定等配置。
2 IIS环境配置
首先,实现IIS的地址重写需要在IIS中安装ARR和URL重写模块。这两个模块在IIS8中不再是默认安装的,也无法从添加或启用Windows功能中获取。需要自己去微软的网站上下载。我使用了微软的产品在线下载器(Microsoft Web Platform Installer)进行搜索和下载。
3 URL地址重写
3.1 IIS管理器内添加规则
使用Windows Server端的IIS管理程序,首先开启ARR,然后再到对应站点中的URL重写模块中去设置入站规则,输入识别入站URL的正则表达式,并编写重写地址。
由于有GUI向导,比起纯手写配置文件还是明显易用,逻辑清晰的。
在IIS管理器中设置生成的规则实际上也是在站点的Web目录下生成一个web.config
文件。
3.2 编写web.config配置文件
直接操作web.config
文件可以实现更细致的配置内容。
但网上关于web.config的编写说明少之又少,微软官方MSDN中也没有足够细致到可以阅读文档进行编写的程度。(当然也可能是我没找到)
找到一个老外的博客倒是写了一份基于IIS的Seafile服务器的地址重写:
Seafile HTTPS Install on Windows Server 2012 R2; Step-by-Step
不过老外给出的案例文档有些问题,估计是手误,也可能是没在真实环境中测试过,有些小瑕疵,如:有一处</rule>
写成了</rules>
,会导致服务器报错,无法正确解析。
以下是我修改后,且测试成功的。
1 |
|
根据我查到的资料和理解,做一些补充解释:
<?xml version="1.0" encoding="UTF-8"?>
- 第一行注释形式的文件说明是xml的编写格式规范,以便机器识别
web.config
文件内容从<configuration>
开始,诸如<rewrite>
之类的规则包含在<system.webServer>
标签内condition
就是IIS管理器中URL重写
里 编辑入站规则 的 条件 选项<action>
中的url就是地址重写的重写目标,即从入站时被正则表达式匹配的是源地址,而重写过后即为此处的目的地址。{R:1}
表示入站时,域名后面的参数
4 URL重写与Seafile服务器
4.1 Nginx环境
之前在CentOS上使用的是Nginx通过FastCGI转发seahub网站页面的请求到127.0.0.1的8000端口。
此时的8000端口是不能直接访问的。
4.2 IIS环境
IIS的CGI模块中我没找到如何实现将请求转发到本地端口,只找到了使用本地的可执行文件去处理特定请求。
由于缺少Seafile官方技术文档的支持,我摸索下来的解决方案是Windows Server下则通过IIS的URL重写实现将用户的入站请求重写后,转发到Seafile位于8000端口的网站服务器和位于8082端口的文件服务器。
也就是说,此时的8000端口是一个独立运作的网站,是可以直接访问的。