IIS configuration(IIS配置)
(以下内容,译自Category:Tutorials中的IIS configuration。更多内容可以参看Category:Chinese。)
本专题介绍如何进行各类微软因特网信息服务(the Microsoft Internet Information Services)配置。
文中所用的设置是根据示例目录webRPC中jsonRpcService_isApi(参见Web Services)的需要而做的,这类东西随着情况的不同而不同,不过还是很容易调整的。
jsonRpcService_isApi 工程创建的是一个 ISAPI 插件 (dll),实现了一个JSON-RPC服务。例子中还包括了一些客户端浏览器能够访问的HTML、CSS以及 JavaScript等相关文件。因此,IIS的配置要满足两个方面的需求:
- 一是文件提供者
- 一是ISAPI服务
所有的IIS配置都在 Internet Information Services Manager 中。
配置窗口部件
要使用因特网信息服务、管理器,运行ISAPA和/或CGI的插件,先要确保计算机上它们都是可用的。
在 Programs and Features -> Turn Windows Features on or off 中,应该确保下面这些内容是可用的:
- 因特网信息服务(Internet Information Services)
- IIS 管理控制台
- CGI(其实这一点并非示例 jsonRpcService_isApi 所要求的)
- ISAPI 扩展
应用池
ISAPI服务必须运行在一个可用的应用池中,它提供了各种IIS部件的过程隔离。这有以下优点:
- 它使得整个IIS的鲁棒性得到加强,因为一个应用池的问题不大可能影响到其它应用池(当然了,耗尽系统资源会产生交叉影响);
- 各个池可以有不同的设置(比如用于.net平台的,等等);
- 各个池可以独立重启。
要创建应用池,在Application Pools关联菜单中选择 "Add Application Pool..."。用于Visual Prolog程序的池,并不需要任何.net平台,建议选择不需要.net支持以降低出现干扰的风险。给池取个名字,选择"No Managed Code"(除非有其它理由需要它)。别的就不用管了:
32比特支持
注意,缺省时应用池在64位平台上是不能运行32位程序的。必要时可以在"Advanced Setting"中做设置:
文件服务
jsonRpcService_isApi 示例需要向运行Web应用程序的Web浏览器分发文件。这可以设置一个“虚拟目录”或是一个“应用程序”(后者仅当程序必须运行于该Web部分时才是必须的)。
Alias 定义了在WEB中与Path相关的名称,而Physical path则定义了这个路径对应的磁盘位置。在这里,http://localhost/webRPC对应于C:\webRPC\web,这里就是示例中html、css以及JavaScript等文件的位置(我的情况下)。
ISAPI设置
在示例中,路径 http://localhost/webRPC/jsonrpc 需要运行jsonRpcService_isApi ISAPI dll。为此,我们来在虚拟目录webRPC中添加一个应用程序:
要确保该应用程序使用了所期望的应用池。我们一般不使用物理路径,但IIS会将web.config文件放在该目录下。创建一个新目录来放这个文件也是个不错的选择,不过这里我们就直接使用示例根目录:
放好应用程序之后就可以配置ISAPI了。选择Handler Mappings:
接着,再添加一个 "Script Map",与所有东西相匹配并指向ISAPI dll:
在我们的磁盘上JSON-RPC请求不属于"script"文件,所以我们得在Request Restrictions...设置中去掉 "Invoke handler only if request is mapped to" 的勾选:
如果所有设置OK,出现下图所示的情况,也就可以说OK了:
用户权限
IIS运行时,会作为Windows某类特定用户访问各类文件,因此它对这些文件必须有足够的权限。 run it will access various files as a certain Windows user, this user must have sufficient rights to the files.
Which user is determined like this:
- 若对虚拟目录或应用程序设置的是Connect as..."用户,则这类用户可以访问文件; user is set for the virtual directory or application then that user will access the files
- 否则(如果使用了Pass-through授权)Otherwise (if Pass-through authentication is used):
- 如果允许匿名访问虚拟目录/应用程序,则某些IUSER_...可以访问文件;If annoymous access is allowed to the virtual directory/application then some IUSER_... is will access the files
- 如果使用了某些Windows授权,则来自连接的windows用户可以访问文件。If some Windows authentification is used the windows user from the connection will will access the files
Anonymous/Windows访问由Authentification图标控制。
Skype HTTP/HTTPS 冲突
Skype (potentially) conflicts with HTTP/HTTPS servers, because Skype (by default) reserves port 80 (HTTP) and 443 (HTTPS).
As a result you cannot run an HTTP/HTTPS server when Skype runs (in default mode).
The solution is to turn off port 80/443 in Skype.
See this video: Handling port conflicts with Skype on Windows