![Apache“允许来自”规则仅适用于 IP 地址](https://linux22.com/image/486774/Apache%E2%80%9C%E5%85%81%E8%AE%B8%E6%9D%A5%E8%87%AA%E2%80%9D%E8%A7%84%E5%88%99%E4%BB%85%E9%80%82%E7%94%A8%E4%BA%8E%20IP%20%E5%9C%B0%E5%9D%80.png)
我在个人服务器上设置了一个非常简单的 apache2 - 即配置文件中除了允许/拒绝规则之外几乎没有自定义内容,并且我刚刚将 Ubuntu 版本从 8.04 升级到 8.10。但是,尽管在升级过程中保留了 apache 配置文件,但如果我尝试访问以前可以访问的网页,除非我使用本地主机,否则 apache 现在会给我“403 fobidden”。如果我更改
允许来自 hostname.domain.local
到
允许来自 192.168.1.xxx
在我请求的目录的 apache 配置文件中,我可以顺利访问该页面。
不幸的是我的 Apache 技能不太高。有人能提供一些建议来解释为什么会发生这种情况吗?
以下是我们尝试过的一些方法:
- 通过主机名 nslookup 查找受影响计算机的 IP 地址(我得到了预期的结果)
- php -r 'echo gethostbyaddr("192.168.1.196")."\n";' 此命令以主机名作为回复
答案1
好的,我找到了问题:它与 avahi-daemon 有关:请参阅错误 80900 如果我禁用守护进程,apache 就可以正常工作。可能还有一个我可以编辑的配置文件,但目前我只能花时间禁用守护进程。如果我找到更好的答案,我会更新这个问题!
答案2
Apache 的 mod_access 提供了“允许来自...”功能。
对于“允许来自”的要求,mod_access 将执行:
- 对客户端 IP 进行反向 DNS 查找(IP 地址到主机名)
- 正向 DNS 查找(从第一次查找的主机名到 IP 地址)
如果反向和正向查找成功并且一致(匹配主机名/IP),并且“允许来自”部分中的主机名相同(或为后缀),则应该允许您访问。
由于您的“允许来自”语句适用于 IP 地址,但不适用于主机名,因此它可能与 DNS 有关。
从你的网络服务器,你应该能够执行以下操作:
- dig -x 192.168.1.xxx,给出 hostname.domain.local 的 PTR 结果(或以此为后缀的主机名)
- dig hostname.domain.local(或来自 1. 的主机名),提供如 1 中的 IP 地址。
如果 DNS 结果不符合您的预期,则首先要确定哪些文件/名称服务器(/etc/hosts 和 /etc/resolv.conf、/etc/nsswitch.conf?)是开始调试的地方。