<-
Apache HTTP 服务器 2.4 > 有关DNS和Apache的问题

有关DNS和Apache HTTP Server的问题

该页面可以用以下语句来概括:不要以依赖DNS解析来解析配置文件的方式配置Apache HTTP Server。如果httpd需要DNS解析来解析配置文件,则您的服务器可能会遇到可靠性问题(即,它可能无法启动),或者遭到拒绝和盗窃服务攻击(包括能够从其他虚拟主机中窃取数据的虚拟主机)。

支持Apache!

也可以看看

最佳

一个简单的例子

# This is a misconfiguration example, do not use on your server
<VirtualHost www.example.dom>
  ServerAdmin webgirl@example.dom
  DocumentRoot "/www/example"
</VirtualHost>

为了使服务器正常运行,绝对需要有关每个虚拟主机的两条信息: ServerName服务器将绑定并响应的至少一个IP地址。上面的示例不包含IP地址,因此httpd必须使用DNS查找的地址www.example.dom。如果由于某种原因在服务器解析其配置文件时DNS不可用,则将不会配置该虚拟主机。它将无法响应对此虚拟主机的任何点击。

假设www.example.dom地址为192.0.2.1。然后考虑以下配置片段:

# This is a misconfiguration example, do not use on your server
<VirtualHost 192.0.2.1>
  ServerAdmin webgirl@example.dom
  DocumentRoot "/www/example"
</VirtualHost>

这次httpd需要使用反向DNS来ServerName为此虚拟主机找到 。如果反向查找失败,则它将部分禁用虚拟主机。如果虚拟主机是基于名称的,那么它将被完全禁用,但是如果虚拟主机是基于IP的,则它几乎可以正常工作。但是,如果httpd必须曾经为服务器生成包括服务器名称的完整URL(例如,发出重定向时),则它将无法生成有效的URL。

以下是可避免这两个问题的代码段:

<VirtualHost 192.0.2.1>
  ServerName www.example.dom
  ServerAdmin webgirl@example.dom
  DocumentRoot "/www/example"
</VirtualHost>
最佳

拒绝服务

考虑以下配置片段:

<VirtualHost www.example1.dom>
  ServerAdmin webgirl@example1.dom
  DocumentRoot "/www/example1"
</VirtualHost>
<VirtualHost www.example2.dom>
  ServerAdmin webguy@example2.dom
  DocumentRoot "/www/example2"
</VirtualHost>

假设您已将分配为192.0.2.1,将分配为 www.example1.dom192.0.2.2 www.example2.dom。此外,假设 example1.dom具有对自己的DNS的控制权。有了这个配置,您example1.dom就可以让他们窃取所有发往的流量example2.dom。为此,将他们要做的全部设置www.example1.dom为192.0.2.2。由于他们控制自己的DNS,因此您无法阻止他们将www.example1.dom记录指向任何希望的地方。

进入192.0.2.2的请求(包括所有用户以格式的URL键入的请求 http://www.example2.dom/whatever)将全部由example1.dom虚拟主机处理。为了更好地理解为什么会发生这种情况,需要更深入地讨论httpd如何将传入请求与将为其服务的虚拟主机进行匹配。提供了描述此内容的粗略文档。

最佳

“主服务器”地址

基于名称的虚拟主机支持要求httpd知道httpd 正在运行的主机的IP地址。要获取此地址,它可以使用全局 ServerName (如果存在)或调用C函数gethostname (返回的函数应与在命令提示符下键入“主机名”相同)。然后,它在该地址上执行DNS查找。目前没有办法避免这种查找。

如果您担心此查询可能会由于DNS服务器已关闭而失败,则可以在/etc/hosts其中插入主机名(您可能已经拥有该主机名, 以便计算机可以正常启动)。然后,确保将您的计算机配置为/etc/hosts在DNS失败的情况下使用。根据您使用的操作系统,这可以通过编辑/etc/resolv.conf或完成/etc/nsswitch.conf

如果您的服务器由于任何其他原因不必执行DNS,则可以通过将HOSTRESORDER环境变量设置为“本地”的httpd运行。这完全取决于您使用的操作系统和解析器库。除非您mod_env用来控制环境,否则它还会影响CGI 。最好查阅操作系统的手册页或常见问题解答。

最佳

避免这些问题的提示

可用语言: zh  |  fr  |  ja  |  ko  |  TR 

最佳

注释

注意:
这不是“问答”部分。此处放置的评论应指向有关改进文档或服务器的建议,如果实施或被认为无效/偏离主题,我们的主持人可以将其删除。有关如何管理Apache HTTP Server的问题,应直接指向我们的IRC频道#httpd(位于Freenode上),或发送至我们的邮件列表
目前,此页面已禁用评论。