服务器架好之后,就想着怎样把所有的服务统一管理。My Book 上的 Transmission,主机上的 eMule,还有 MiPony,这些程序都带有用于远程控制的 WebUI。但是这些服务分散在内网的多个机器上,需要设置逆向代理才能从外网统一访问。
首先根据教程安装上 Rewrite 2.0 和 Application Request Routing 2.0。但是,在设置 Rewrite Rule 的之后,远程访问总是报告 404 文件未找到。后来终于找到原因,在 IIS 7.5 上需要用“服务器场(Server Farm)”来引导请求指向。
首先,在新建一个服务器场,就叫做 eMule。这个服务器场只有一个服务器。(由于我的 eMule 远程控制端口开在 5000,所以要先把 httpPort 改成 5000,再点“添加”)
然后,在 Inbound Rewrite Rule 里面选择“指向直服务器场”。
逆向代理的好处不仅仅是中心管理,而且还能使用 SSL 加密连接和 IIS 集成的用户验证,这样可以使远程管理更加安全。
后记:有些时候 Geek == Freak(翻译成中文就叫“沙比”)。本来也想把 uTorrent WebUI 集成进来的,结果发现 uTorrent 的用户验证没办法关掉,而 IIS 7.5 又需要另外一套验证。uTorrent 官网上有很多人建议把用户验证作为可选项,可是得到的回复都是“为了安全起见,俺们不会那么做。否则小白的机器就会被别人控制,所有下载都会被删光光……” 就一个简单的明文验证还叫安全?难道坏蜀黍们就不会嗅探远程密码、得到控制权限么?做个可选项,并且默认启用会死?
2011/02/06 更新:
终于把 uTorrent 也给设置好了。这里需要耍个小聪明,因为我的服务器使用的是简单密码登录,而 ARR 在做逆向代理的时候,会把 HTTP 头的验证部分也传递过去,所以只需要在 uTorrent 里面把用户名/密码设置成跟登录服务器的一致就可以了。
另外,uTorrent 2.0 以上版本的 WebUI 加入了 Auth Token,这个“安全巧妙”的设计却使用了一种非常傻缺的方法来实现:在 javascript 脚本里面不断请求 http://{host}/gui/?token= 或者http://{host}/gui/token.html。我的转向目录设置为 /utorrent/,所以请求 /gui/ 下面的东西 IIS 理所当然地回复 404 文件未找到。
解决方法也很麻烦,要在 uTorrent 程序配置路径中找到 webui.zip,用 WinZip/WinRAR 将里面的 webui.js.gz 解出来,再用 gunzip 解出 webui.js,把里面的 urlBase(在 3.8.0 中是 guiBase)变量强制改为“./”,再用 gzip 封包,然后替换到 webui.zip 中。到这里还没完,还需要重新启动 uTorrent 才能使更改生效!
最后,终于把 uTorrent 也整合到中心管理中了。
2011/02/06 另更新:
如果在根节点设置 Rewrite Rule,则必须使用服务器场。如果在某一站点节点设置 Rewrite Rule,可以不使用服务器场,直接填写 http://server-address/service-url 即可。