$_SERVER['HTTP_HOST'] 未设置

问题描述 投票:0回答:3

我的 php 页面有大量流量,但没有设置变量

$_SERVER['HTTP_HOST']

此流量相当于每秒 1 次点击。我不知道它可能是什么,但为了减少服务器负载,我在每个 php 页面的顶部都这样做:

if (!isset($_SERVER['HTTP_HOST']))
    exit;

你知道是什么原因造成的吗?未设置

HTTP_HOST
时退出是否安全?

普通用户不设置

HTTP_HOST
可以访问我的页面吗?

  • PHP版本:5.2.0-8
  • 阿帕奇:2.2.3
php apache
3个回答
7
投票

嗯,可能也是“apache 虚拟连接”。检查“内部虚拟连接”的访问日志,这些是apache主进程用来向他的子进程发送命令的(比如自杀,或者我们需要重新加载conf)。这些连接是在 HTTP/1.0 中建立的,没有设置 HOST。

http://wiki.apache.org/httpd/InternalDummyConnection

这些 #$!"#sh#f#ck*$! 连接在那里产生了很多错误(缓存内容、没有 HTTP/1.1 等)。一个“简单”的解决方案是没有基于主机名的 Virtuahost 服务您的主应用程序作为默认虚拟主机。保留一个非常简单的默认虚拟主机,其中包含“它可以工作”页面,或者非常简单的内容“如果您获得此页面,您可能会尝试在某处获取支持 HTTP/1.1 的浏览器”,作为静态那么所有 HTTP/1.0 流量或仅通过 IP 访问您服务器的人都不会出现在您的真实应用程序中。

为了完整起见,我今年看到一家公司使用不良代理从所有传出 HTTP 流量中删除主机标头。但这些坏人都是蠢货,我不认为还有很多人还在没有主机的情况下浏览 HTTP/1.0。


5
投票

HTTP_HOST
是客户端 HTTP 请求的一部分,指定请求将定向到哪个主机名。有必要在多站点设置中区分正确的站点。

如果未设置

HTTP_HOST
,则客户端要么非常非常旧(HTTP 1.0 不支持 HTTP_HOST),要么直接向您网站的 IP 发出请求。

我看不出像你那样阻止它有什么坏处。但是,如果您担心流量问题,那么在 Web 服务器级别解决此问题可能会更明智。


0
投票

如果您在 Nginx 版本 1.25 或 1.26 中使用 HTTP/3,则由于 Nginx 中的错误,$_SERVER 中不存在 HTTP_HOST 变量。

请参考php-src@GitHubnginx-quic@Github上的讨论。

© www.soinside.com 2019 - 2024. All rights reserved.