Windows网络上的apache - 无法从网络连接到外部IP

时间:2012-01-02 01:00:34

标签: apache codeigniter networking nat windows-networking

我创建了一个AMP网络应用程序,最初将由传统的第三方主机提供。

当我们完成时,客户决定在其办公室网络中的服务器上内部托管它。该申请仅供工作人员使用,但这些工作人员通常不在现场。我没有参与设置他们的网络,它至少使用一台运行Windows Server 2003的服务器。我看到的客户端机器是XP。

我在服务器2003机器上设置了Apache,MySQL和PHP,并安装了该应用程序。该应用程序构建在CodeIgniter框架上,因此我将base_url设置为内部IP(192.168 ...),我们在网络内进行了测试。一切都很好。

接下来,我们让他们的网络人员为apache打开80端口。我将base_url设置为外部IP,并在我的家中进行测试(使用外部IP作为网址),并且工作正常。

但是,当尝试使用网络内部的外部IP访问应用程序时,它们无法连接。我可以将base_url重置为网络IP,并且可以使用网络IP访问它,但是当外部连接时应用程序失败(因为整个应用程序中使用的base_url指向内部IP)。

假设我可以让CodeIgniter确定base_url(将变量保留为空字符串),但宁愿弄清楚为什么外部IP在网络中失败,并尝试纠正它。

我们使用的服务器并非专用于AMP堆栈(事实上,它至少有一个其他应用程序广播到互联网,必须使用IIS,以及用于办公室扫描仪的FTP服务器),所以我想那里可能会有一些冲突。

我对Windows网络知之甚少。快速搜索建议这可能是因为NAT,但没有提供解决方法。

他们的网络人员没有任何建议,并说一切都应该没问题。

是否可以让网络内的用户使用外部IP访问Apache服务器,如果是,那么启用该功能需要做什么?

TYIA

2 个答案:

答案 0 :(得分:2)

您的客户端NAT路由器配置为在重写源IP地址和目标IP地址后,将端口80到达其外部IP的数据包转发到内部计算机端口80在数据包中。

在网络内,尝试连接到外部IP地址的路由将被路由到计算机上的默认路由,路由器的内部接口。此接口配置为将数据包转发回网络

配置应用程序以侦听所有IP地址。确保服务器知道客户端在多个主机名下知道它 - 内部IP地址和外部IP地址。

您可以在路由器上重新编写NAT防火墙规则,以便为内部接口执行端口转发,但家庭和小型企业中常见的外壳设备不 em>让这项任务变得简单。更昂贵的设备(或自制的* BSD / Linux路由器机器)可以毫不费力地做到这一点,但它会不必要地增加路由器的流量。

答案 1 :(得分:0)

这与Apache无关,也与CI无关。通常无法从网络中访问外部IP地址。

坦率地说,我不确切地知道为什么会这样。我知道它与NAT(网络地址转换)的工作原理或至少如何实现有关。

有关为什么的详细概述,您应该在serverfault上提出这个问题。如果你只是一个必须处理它的程序员,那么接受NAT通常只能从内到外,外到内,但不能从里到内。

您已经提到了问题中的一个解决方案 - 请勿使用base_url。您也可以简单地在外部IP地址(不是您的公司IP,但让我们说数据中心或其他东西)上运行服务器。