我的机器运行的是 Windows 7 Ultimate。以下是我迄今为止(成功)完成的操作:
- 通过 FastCGI 安装 IIS 7.5 和 PHP
- 成功了!当我去http://localhost/index.php,我的 PHP 脚本运行良好。
- 运行 ipconfig 发现我的本地 IP 地址是 192.168.1.102。我确认http://192.168.1.102/index.php功能与上面的本地主机地址完全相同。
- 进入我的路由器管理(我有一台 Linksys WRT54G2)并设置端口 80 到 192.168.1.102 的端口转发。现在端口 80 正在转发到我的机器。
- 在 Windows 防火墙中设置入站规则以允许端口 80 上的所有活动。
- 从 Google 上查出我的外部 IP 地址。我们将其称为 XXX.XX.XX.XX。
然而,当我尝试去http://XXX.XX.XX.XX/index.php无论是从我自己的机器,还是从远处且不在我的网络上的计算机,无论哪种方式...我都一无所获。它尝试连接一段时间(未成功),但最终还是放弃了。
我想知道的是:
- 我遗漏了什么?我忘记/忽略了什么?如何才能让它在我的本地网络之外正常工作并可访问?
- 假设我确实可以正常工作,那么我如何使用端口 80 以外的端口?为了实现这一点,我需要进行哪些更改(例如 IIS、Windows 防火墙、路由器管理等)?
首先十分感谢!
答案1
这听起来像是您遇到的 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
由于您声明已经创建了防火墙规则,因此可能不需要最后一个命令。
答案2
(从网络外部访问)许多住宅 ISP(和一些商业 ISP)将阻止某些服务端口(如端口 80 或 25)上的入站流量。这通常是为了防止您在住宅线路上运行商业服务,因为带宽使用量太大。另一种方法是在另一个端口上运行它(见下文)。
(从网络内部访问)您描述的情况听起来像是发夹式 NAT。以下是一份很好的高级Hairpin NAT 概述。您需要向路由器添加 NAT 规则,以便始终使发往外部 IP、端口 80 的流量通过路由器,而不是直接从网络内的主机到主机。警告:您的路由器实际上可能无法做到这一点。
更改端口绑定在 IIS 中,然后重新启动网站。
答案3
我遇到了同样的问题。Windows 防火墙阻止了访问。关闭它并再次检查。我猜它会起作用。