我有一个 Web 服务器,从本地 IP 地址提供页面服务。
它位于 NAT 后面,已正确设置 80 和 443 的端口转发(通过指向另一个本地 Web 服务器进行测试)。
当尝试从公共地址访问时,我得到 403,但同时一切都可以从本地网络访问。
Web 服务器是 apache。
检查的顺序是怎样的?
编辑:谢谢大家的回答。问题已解决。
我检查了 apache 访问日志(其中提到了 403),但并没有给我任何线索。当时我基本上想知道是 apache 还是 webapp(drupal)给出了这个响应。在对 apache 配置进行了三次检查后,我还更彻底地检查了 webapp,发现非本地 IP 被禁止了。
编辑2: 如果有人提供了一个好的答案(或扩展现有的答案),关于什么是确定它是 apache 还是 webapp 的正确方法,我会接受它作为答案。
答案1
您在 apache 配置中使用基于名称的虚拟主机吗?您如何从 LAN 连接并通过 NAT 路由器?如果您有基于名称的虚拟主机,则 HTTP 请求中的 Host 标头定义哪个虚拟主机为请求提供服务。例如,如果我有类似以下内容:
<VirtualHost *:80>
ServerName my.internal.hostname
.....
</VirtualHost>
<VirtualHost *:80>
ServerName some.other.hostname
...
</VirtualHost>
我在外部路由器上连接http://my.nat.路由器/,我可能会最终使用我指定的最后一个虚拟主机名。如果该虚拟主机名设置在没有权限的 DocumentRoot 上,我会得到 403。
另一种可能性是,您指定了 DocumentRoot,但稍后的 Directory 指令中没有“允许所有”,而只有“允许来自 192.168.0.0/24”之类的内容。
答案2
apache 错误日志说了什么?那应该能给你一些线索。
最佳猜测 - 仔细检查您的 Web 服务器配置 - 您是否允许“任何”访问?其中可能有一条规则仅允许本地子网。
答案3
403 表示禁止访问。您允许匿名访问 apache 吗?