windows网络上的apache-can';t从网络中连接到外部ip

windows网络上的apache-can';t从网络中连接到外部ip,apache,codeigniter,networking,nat,windows-networking,Apache,Codeigniter,Networking,Nat,Windows Networking,我创建了一个AMP web应用程序,该应用程序最初将由传统的第三方主机提供服务 当我们结束时,客户机决定在其办公室网络的服务器上对其进行内部托管。该应用程序仅适用于工作人员,但这些工作人员通常不在现场。我没有参与建立他们的网络,该网络至少使用一台运行WindowsServer2003的服务器。我看到的客户机是XP 我在Server2003机器上设置了Apache、MySQL和PHP,并安装了应用程序。该应用程序构建在CodeIgniter框架上,因此我将base_url设置为内部IP(192.1

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

当我们结束时,客户机决定在其办公室网络的服务器上对其进行内部托管。该应用程序仅适用于工作人员,但这些工作人员通常不在现场。我没有参与建立他们的网络,该网络至少使用一台运行WindowsServer2003的服务器。我看到的客户机是XP

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

接下来,我们要求他们的网络人员为apache打开端口80。我将base_url设置为外部IP,并在家中进行了测试(使用外部IP作为web地址),效果良好

但是,当尝试从网络内使用外部IP访问应用程序时,他们无法连接。我可以将基本url重置为网络IP,他们可以使用网络IP访问该url,但在外部连接时应用程序会失败(因为整个应用程序使用的基本url指向内部IP)

它假设我可以让CodeIgniter确定基本url(将变量保留为空字符串),但我更愿意找出外部IP在网络中失败的原因,并尝试纠正这一点

我们使用的服务器不是专用于AMP堆栈的(事实上,它至少有一个其他应用程序向internet广播,必须使用IIS,还有一个用于office扫描仪的FTP服务器),因此我认为可能存在一些冲突

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

他们的网络伙伴没有任何建议,说一切都应该很好

有没有可能让网络内的用户使用外部IP访问Apache服务器?如果有,需要采取什么措施才能实现这一点


TYIA

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

坦白说,我不知道这到底是为什么。我知道这与NAT(网络地址转换)的工作方式有关,或者至少与它的实现方式有关


有关原因的详细概述,请在上提出此问题。如果你只是一个必须处理NAT的程序员,请接受NAT通常只能从内到外、从外到内工作,而不能从内到内工作


您已经在问题中提到了一个解决方案-不要使用
base\u url
。您也可以简单地在外部IP地址(不是您公司的IP,而是数据中心或其他什么)上运行服务器。

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

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

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


您可能可以在路由器上重新编写NAT防火墙规则,以执行内部接口的端口转发,但家庭和小型企业中常见的壳外设备并不能轻松完成此任务。更昂贵的设备(或自制的*BSD/Linux路由器机器)可以不费吹灰之力就完成这项工作,但它会给路由器带来不必要的流量。

好问题,但老实说,这应该是一个问题。“如果你只是一个程序员,必须处理它”-是的!我之所以使用CI和Apache标记,是因为问题提到了这两个方面,我认为这很重要,但你说得对,这是一个网络/服务器问题。不管怎样,我只是将base_url设置为一个空字符串,它看起来很好。谢谢你的回复。