我如何让IIS在我的networking之外工作,并在路由器后面访问?

我的机器正在运行Windows 7旗舰版。 以下是我迄今为止所做的(成功):

  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的function与上面的localhost地址完全一样。
  4. 进入我的路由器pipe理(我有一个Linksys WRT54G2),并设置在端口80端口转发到192.168.1.102。 现在端口80正在转发到我的机器。
  5. 在Windows防火墙中设置入站规则以允许端口80上的所有活动。
  6. 找出我的外部IP地址来自Google。 我们称之为XXX.XX.XX.XX.

然而,当我尝试从我自己的机器,或从远在电脑上的http://XXX.XX.XX.XX/index.php ,而不是在我的networking上,无论如何…我什么也没得到。 它试图连接一段时间(失败),但最终只是放弃。

这是我想知道的:

  1. 我错过了什么? 我忘了/忽略了什么? 我如何才能在自己的本地networking之外工作并访问?
  2. 假设我确实得到了这个工作,那么我怎样才能使用80端口以外的端口呢? 我需要做些什么改变(例如IIS,Windows防火墙,路由器pipe理等)才能做到这一点?

非常感谢!

这听起来像一个HTTP.SYS问题,你有。

下面是Scott Hanselman博客的摘录,介绍了如何在本地主机之外公开IISExpress。 博客文章更长,也描述了如何连接SSL。 但是我相信下面我发布的这些命令可以帮助你解决你所遇到的问题。

首先,我们需要在内核级别告诉HTTP.SYS,让所有人都通过创build一个“Url Reservation”来与这个URL对话。 从pipe理命令提示符处:

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

接下来,因为我想能够从外部(我的networking上的人,不仅仅是本地主机)与IIS Express交谈,那么我需要通过Windows防火墙允许IIS Express。 我可以从Windows中以graphics方式执行此操作,或者键入:

netsh firewall add portopening TCP 80 IISExpressWeb enable ALL

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

  1. (从networking外部访问)许多住宅ISP(以及某些商业ISP)将阻止某些服务端口(如端口80或25)上的入站stream量。这通常是为了防止由于带宽使用而在住宅线路上运行业务服务。 另一种方法是在另一个端口上运行它(见下文)。

  2. (从networking内部访问)您所描述的情况听起来像发夹式NAT。 这是一个很好的高层次的概述 。 您需要将NAT规则添加到您的路由器,以便始终将stream量发送到您的外部IP,端口80将通过您的路由器,而不是直接从您的networking中的主机到主机。 警告:您的路由器可能实际上无法做到这一点。

  3. 在IIS中更改端口绑定 ,然后重新启动网站。

我有同样的问题。 Windows防火墙阻止访问。 closures并再次检查。 我的猜测是,它会工作。