我发现(通过查看 mod_pagespeed 缓存条目)一个我以前从未听说过的完全随机的域名正在解析我的网站。
如果我访问此域名,我的网站就会加载。该域名的 DNS 指向我的服务器的 IP。
现在在我的 vhost 配置中我有 *:80,我猜这是我出错的地方。
我立即将其更改为 example.com:80,其中 example.com 是我的域名。假设这意味着服务器只会响应和满足对我的域名的请求,而不是端口 80 上的任何请求。
我原来的 vhost 配置;
<VirtualHost *:80>
DocumentRoot "/var/www/example.com"
<Directory "/var/www/example.com">
Order allow,deny
Allow from all
Allowoverride all
</Directory>
</VirtualHost>
我新尝试的配置;
Listen 80
ServerName example.com
<VirtualHost example.com:80>
DocumentRoot "/var/www/example.com"
<Directory "/var/www/example.com">
Order allow,deny
Allow from all
Allowoverride all
</Directory>
</VirtualHost>
当我尝试使用新配置重新启动 apache 时出现以下错误:
* Restarting web server apache2 [Fri Mar 28 08:55:47.821904 2014] [core:error] [pid 5555] (EAI 2)Name or service not known: AH00549: Failed to resolve server name for 152.155.254.241 (check DNS) -- or specify an explicit ServerName
(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
注意:上述错误中以 152 开头的 IP 已被稍微编辑,但原来的不是我的服务器的 IP 地址。
有人能就这个问题提供建议吗?解析到我网站的域名(实际上有几个)是否只是专用服务器的先前用户,其 DNS 仍指向它?我该如何解决 apache 虚拟主机配置问题,欢迎提供任何其他建议。
谢谢。
答案1
让其他域名指向您的主机可能没有什么坏处,当然,这会增加您服务器的负载。如果您想阻止它们,请为它们设置新的虚拟主机:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName example.com
# example.com configuration
</VirtualHost>
<VirtualHost *:80>
ServerName baddomain.com
Deny from all
</VirtualHost>
相反,Deny from all
您可以使用它Redirect permanent /error.html
来向他们显示自定义错误消息。
您可以为要阻止的每个域重复第二个 VirtualHost,或者如果有很多域,请将其放在第一位以使其成为默认 VirtualHost,并为您的域设置例外:
NameVirtualHost *:80
<VirtualHost *:80>
# default VirtualHost
Deny from all
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
# example.com config
</VirtualHost>
至于您的错误消息,似乎 Apache 在启动时无法解析主机名 example.com,或者找不到您的ServerName
指令。不知道为什么。第二个错误表明您的主机上的端口 80 已被使用。您是否已关闭所有先前的 Apache 实例?
答案2
Apache 作为您定义的第一个域的默认设置。
如果您希望在 myowndomain.com 上提供您想要的内容,并在所有其他域上提供某些行为(也许重定向到您首选域上的相应页面),请首先定义“catchall”域,适当处理流量(我建议重定向到您的真实域),然后使用后续的 VirtualHosts 定义您的真实域等。
答案3
关于“我的网站的其他名称到底是从哪里来的”,任何人都可以将他们喜欢的任何 A 记录放在他们控制的域名下的任何名称下。您可以使用进行一些调查,whois
找出谁注册了包含有问题的 DNS 名称的二级域名。
答案4
您应该始终将默认的 VirtualHost 放在第一位,就像 @Andrew Schulman 的第二个解决方案一样。
这样,您就可以使用配置中的 CustomLog 和 ErrorLog 将所有不针对您网站的请求保存在不同的日志文件中 - 如果您使用 AWStats 或其他程序来创建统计数据,您就不会希望这些请求出现在您的日志中。
此外,很多(大多数?)攻击都会针对您的 IP,而不是您的主机名。同样,这将使您的真实站点日志保持干净,并直接拒绝所有攻击。