如何让 IIS 在路由器后面的网络之外工作和访问?

soa*_*gem 9 iis router port-forwarding iis-7.5 windows-firewall

我的机器运行的是 Windows 7 Ultimate。到目前为止,这是我所做的(成功):

  1. 通过 FastCGI 安装带有 PHP 的 IIS 7.5
  2. 搞定了!当我访问http://localhost/index.php 时,我的 PHP 脚本运行良好。
  3. 跑 ipconfig 发现我的本地 IP 地址是 192.168.1.102。我确认http://192.168.1.102/index.php 的功能与上面的 localhost 地址完全一样。
  4. 进入我的路由器管理(我有一个 Linksys WRT54G2)并在端口 80 上设置端口转发到 192.168.1.102。现在端口 80 正在转发到我的机器。
  5. 在 Windows 防火墙中设置入站规则以允许端口 80 上的所有活动。
  6. 从 Google 找出我的外部 IP 地址。我们称之为 XXX.XX.XX.XX。

但是,当我尝试从我自己的机器上访问http://XXX.XX.XX.XX/index.php 时,或者从远离我的网络的计算机上访问http://XXX.XX.XX.XX/index.php 时,无论哪种方式......我都一无所获。它尝试连接一段时间(不成功)但最终放弃了。

这是我想知道的:

  1. 我错过了什么?我忘记/忽略了什么?如何在我自己的本地网络之外运行和访问它?
  2. 假设我确实得到了这个工作,那么我如何使用端口 80 以外的端口?为了使这成为可能,我需要进行哪些更改(例如 IIS、Windows 防火墙、路由器管理等)?

首先十分感谢!

小智 5

这听起来像是您遇到的 HTTP.SYS 问题。

下面是Scott Hanselman 博客的摘录,它描述了如何在 localhost 之外公开 IISExpress。博客文章更长,其中还描述了如何连接 SSL。但我相信我从他的帖子中提取的我在下面发布的命令将帮助您解决您遇到的问题。

首先,我们需要在内核级别告诉 HTTP.SYS,通过制作“Url Reservation”让每个人都可以访问这个 URL。从管理命令提示符:

netsh http add urlacl url=http://<LocalComputerName>:80/ user=everyone

接下来,因为我希望能够从外部(我的网络上的人等。不仅仅是本地主机)与 IIS Express 通信,所以我需要允许 IIS Express 通过 Windows 防火墙。我可以从 Windows 以图形方式执行此操作,或键入:

netsh firewall add portopening TCP 80 IISExpressWeb enable ALL

您可能不需要最后一个命令,因为您声明您已经创建了防火墙规则。