1

我创建了一个 AMP Web 应用程序,该应用程序最初将由传统的第 3 方主机提供服务。

当我们完成时,客户决定在内部托管它,在他们办公室网络的服务器上。该应用程序仅供工作人员使用,但这些工作人员通常不在现场。我没有参与建立他们的网络,该网络至少使用一台运行 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

4

2 回答 2

2

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

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

将应用程序配置为侦听所有 IP 地址。确保服务器知道客户端通过多个主机名知道它——内部 IP 地址和外部 IP 地址。

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

于 2012-01-02T01:10:51.800 回答
0

这与 Apache 无关,也与 CI 无关。从网络内部访问外部 IP 地址通常是不可能的。

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

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

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

于 2012-01-02T01:07:01.597 回答