IISExpress 运行的站点开放局域网访问
问题起因
笔者希望在 Windows 10 下使用 IISExpress 的轻量服务器部署一个局域网内运行的临时站点(运行机器的局域网地址为 192.168.0.180
,监听端口 8888
),直接按照 IISExpress 的启动方法启动网站后,发现只能在本机通过 127.0.0.1:8888
或者 localhost:8888
的 URL 访问,直接在局域网内其他设备访问 192.168.0.180:8888
均连接失败。经查是 Windows 自带的防火墙阻断了访问,因此要把希望其他机器访问的本机端口加入防火墙放行端口中。
解决方案
第一步:配置网站开放端口
设置 IISExpress 配置文件 applicationhost.config
(通常位于 C:\Users\你的用户名\Documents\IISExpress\config
目录下)。
找到要设置的网站的 <sites>
标签,将要开放非本机访问的站点的 <bindings>
标签下增加下列属性:
<binding protocol="http" bindingInformation="*:8888:*" />
例如:
<site name="DirectoryView" id="3" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="G:\folder" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":8888:localhost" />
<binding protocol="http" bindingInformation=":8888:127.0.0.1" />
<binding protocol="http" bindingInformation="*:8888:*" />
</bindings>
</site>
第二步:添加 URL 保留
以管理员身份打开命令提示符或者 Powershell 并执行以下命令:
netsh http add urlacl url=http://*:8888/ user="NT AUTHORITY\INTERACTIVE"
完成后可以通过命令
netsh http show urlacl
查看本机现有的所有保留 URL,当在诸多记录中看到这条时,说明 http://*:8888/
这个 URL 已经被保留好了:
保留的 URL : http://*:8888/
用户: NT AUTHORITY\INTERACTIVE
侦听: Yes
委派: No
SDDL: D:(A;;GX;;;IU)
如果以后不需要保留这个 URL 了,就执行相反命令删除掉即可:
netsh http delete urlacl url=http://*:8888/
第三步:打开防火墙限制
以管理员身份打开命令提示符或者 Powershell 并执行以下命令:
netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=8888 profile=private remoteip=localsubnet action=allow
配置完成后,防火墙就会放行 8888 端口上的 TCP 协议数据交换请求。通过命令
netsh advfirewall firewall show rule name="IISExpressWeb"
查看规则名为 IISExpressWeb
的规则是否成功添加:
PS C:\Windows\system32> netsh advfirewall firewall show rule name="IISExpressWeb"
规则名称: IISExpressWeb
----------------------------------------------------------------------
已启用: 是
方向: 入
配置文件: 专用
分组:
本地 IP: 任何
远程 IP: LocalSubnet
协议: TCP
本地端口: 8888
远程端口: 任何
边缘遍历: 否
操作: 允许
确定。
同样地,如果以后不需要,就把这条规则删除掉就好:
netsh advfirewall firewall delete rule name="IISExpressWeb"
完成
使用命令行
"C:\Program Files\IIS Express\iisexpress.exe" /siteid:3
运行网站(笔者这里是 id
为 3
号的站点),从其他设备访问 http://192.168.0.180:8888/
,可以正常看到运行的网站了。
总结
IISExpress 作为微软开发的 IIS 的轻量版,具有 IIS 的大多数功能,只要把网站路径设置正确,可以作为临时服务器运行静态网站或者基于 ASP.NET 的应用。当然,目录浏览、虚拟目录、重定向等等常见网站配置功能都可以通过写配置文件通过相应的键值设置。只是配置的时候需要自己通过配置文件 applicationhost.config
来设置网站参数而已,不如 IIS 的图形界面直观,但是对于程序猿来说,有没有图形又有什么关系呢(逃)。
个人网站
2019.7.12