Apache“允许”规则只适用于IP地址

我在个人服务器上安装了一个非常简单的apache2安装程序 – 除了允许/拒绝规则之外,configuration文件中的定制非常less,而且我刚刚在8.04-8.10版本的机器上升级了Ubuntu。 但是,尽pipe在升级过程中保留了apacheconfiguration文件,但是如果我尝试访问先前可访问的网页,apache现在会给我“403 fobidden”,除非我使用本地主机。 如果我改变了

从hostname.domain.local允许

允许从192.168.1.xxx

在我请求的目录的apacheconfiguration文件中,我可以无障碍地访问该页面。

不幸的是我的Apache技能并不是很先进。 任何人都可以提供任何build议,为什么这可能会发生?

以下是我们试过的一些事情:

  • nslookup通过主机名从受影响的计算机的IP地址(我得到预期的结果)
  • php -r'echo gethostbyaddr(“192.168.1.196”)。“\ n”;' 这个命令用一个主机名来回答

好吧,我发现问题:它与avahi守护进程有关:看bug 80900如果我禁用守护进程,Apache可以正常工作。 可能还有一个我可以编辑的configuration文件,但是现在禁用守护进程是我所能花费的时间。 如果我find更好的答案,我会更新这个问题!

Apache的mod_access提供了“允许来自…”的function。

对于“Allow from”的要求,mod_access会做:

  • 客户端IP上的反向DNS查找(IP地址到主机名)
  • 正向DNS查找(从第一个查findIP地址的主机名)

如果反向查找和前向查找成功并且一致(匹配主机名/ IP),并且“允许来源”部分中的主机名是相同的(或是后缀),则应该允许访问。

由于您的“允许来自”语句适用于IP地址,但不适用于主机名,因此可能与DNS相关。

从你的networking服务器,你应该能够做到:

  1. dig -x 192.168.1.xxx,给出hostname.domain.local的PTR结果(或者以此作为后缀的主机名)
  2. 挖掘hostname.domain.local(或从1的主机名),给出在1的IP地址。

如果DNS结果不符合您的预期,请确定哪些文件/名称服务器(/ etc / hosts和/etc/resolv.conf,/etc/nsswitch.conf?)是第一个开始debugging的地方。