Apache接受其他服务器的请求?

我遇到了Apache服务器问题(亚马逊的CentOS VPS)。 当apache启动时,它开始接收数百个请求,这是日志的一个例子:

173.208.216.165 - - [25/Jan/2015:18:23:11 +0000] "GET http://go.padstm.com/resources/img/iebt.png HTTP/1.0" 200 36023 "http://go.padstm.com/?id=173374&t=iframe&var=33110" "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729)" 

path/resources/img/iebt.png在我的服务器上,但不是go.padstm.com。 最奇怪的是,Apache正在接受所有的请求。 其他示例:在这种情况下,整个资源不在我的服务器,但Apache返回200:

 198.204.239.250 - - [25/Jan/2015:19:04:39 +0000] "GET http://fstads.com/show.php?z=26&pl=494&j=1&code=1422237874120 HTTP/1.0" 200 10819 "http://financezhen.com/?p=186#respond" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.2a1pre) Gecko/20110324 Firefox/4.2a1pre" 

我不知道为什么这些请求去我的服务器,或为什么它返回200 …

另外,当apache启动并启用模块prefork时,它会启动多个httpd进程。 如果worker模块被启用,它将启动多个线程。 好吧,但在这两种情况下,Apache最终消耗服务器的所有CPU和内存,并没有stream量指向我的服务器。

更多信息:ProxyRequestsclosures。 另外:我使用基于IP的虚拟主机:

 NameVirtualHost xxx.xxx.xxx.xxx:80 <VirtualHost xxx.xxx.xxx.xxx:80> ServerName mydomain.com ServerAlias www.mydomain.com DocumentRoot /var/www/html/w3prod ServerAdmin admin@localhost UseCanonicalName Off CustomLog /var/log/httpd/w3prod.mydomain.com combined ErrorLog /var/log/httpd/w3prod_error.mydomain.com </VirtualHost> <VirtualHost xxx.xxx.xxx.xxx:80> ServerName picfarm.mydomain.com ServerAlias www.picfarm.mydomain.com DocumentRoot /var/www/html/picfarm ServerAdmin admin@localhost UseCanonicalName Off CustomLog /var/log/httpd/picfarm.mydomain.com combined ErrorLog /var/log/httpd/picfarm_error.mydomain.com </VirtualHost> <VirtualHost xxx.xxx.xxx.xxx:80> ServerName test.mydomain.com ServerAlias www.test.mydomain.com DocumentRoot /var/www/html/engine-test ServerAdmin admin@localhost UseCanonicalName Off CustomLog /var/log/httpd/test.mydomain.com combined ErrorLog /var/log/httpd/test_error.mydomain.com ProxyRequests Off ProxyPreserveHost On <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /bosh http://xxx.xxx.xxx.xxx:7070/http-bind/ ProxyPassReverse /bosh http://xxx.xxx.xxx.xxx:7070/http-bind/ ProxyPass / http://xxx.xxx.xxx.xxx:8080/ ProxyPassReverse / http://xxx.xxx.xxx.xxx:8080/ </VirtualHost> 

任何帮助,将不胜感激。 谢谢!

这里的问题是有人已经build立了他们自己的域的DNSlogging,并指出你的IP,而不是他们自己的服务器的IP。 没有办法阻止某人这样做。

你能做些什么来解决问题的基础是:

  • 您可以联系域名padstm.com的所有者,并告诉他们有关错误的信息。 如果确实是一个错误,他们可能会修复它。 但是如果是垃圾邮件发送者,他们会高兴地继续滥用你

  • 您可以从您的托pipe公司申请一个新的IP地址。 您需要更改自己的DNSlogging以指向新的IP,并在closures旧IP之前给它们从caching中淡出的时间。

您也可以让Apache不提供任何包含不属于您的主机名请求的内容。 它的工作方式是,如果使用在其中一个VirtualHost中列出的主机名向Apache发送请求,将使用VirtualHost。 但是,如果主机名不在任何地方,那么默认情况下会使用第一个VirtualHost。 (如果你有兴趣,我写了一个关于这个答案如何工作的更长的描述。)所以你所做的只是设置一个不提供内容的默认VirtualHost。 这是一个示例configuration

 <VirtualHost xxx.xxx.xxx.xxx:80> ServerName default RewriteEngine On RewriteRule .* - [F] </VirtualHost> 

这意味着每一个被请求的URL都会被重写为返回403 Forbidden任何请求到任何主机名,这个主机名在configuration中的其他虚拟主机之一中没有被列为ServerName或者ServerAlias

如果您有兴趣查看服务器上发生了什么,请设置合适的CustomLogErrorLog指令来跟踪它。 如果不是,则通过添加以下几行将日志发送到bitbucket:

 CustomLog /dev/null common ErrorLog /dev/null 

到VirtualHostconfiguration