为什么我收到 400 错误请求?

为什么我收到 400 错误请求?

我刚刚在 AWS ECS 上完成服务器设置。

除了 Apache 版本(从 2.2 到 2.4)和 PHP 版本(从 5.3 到 5.6)之外,所有配置都与我拥有的不同服务器相同。

我已经修改了我的 index.php 文件以仅打印 php_info(),但我不断收到:

错误的请求

您的浏览器发送了该服务器无法理解的请求。此外,尝试使用 ErrorDocument 处理请求时遇到 400 Bad Request 错误。

Apache/2.4.25 (Amazon) 服务器位于 xxx.yyy.com 端口 80

我查看了从我的访问中保存的所有日志,这是我从该特定访问中得到的信息:

错误日志

[Tue Jan 24 16:20:46.154208 2017] [suexec:notice] [pid 32139] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 
[Tue Jan 24 16:20:46.249527 2017] [auth_digest:notice] [pid 32146] AH01757: generating secret for digest authentication ... 
[Tue Jan 24 16:20:46.250415 2017] [lbmethod_heartbeat:notice] [pid 32146] AH02282: No slotmem from mod_heartmonitor 
[Tue Jan 24 16:20:46.276823 2017] [mpm_prefork:notice] [pid 32146] AH00163: Apache/2.4.25 (Amazon) OpenSSL/1.0.1k-fips configured -- resuming normal operations 
[Tue Jan 24 16:20:46.276840 2017] [core:notice] [pid 32146] AH00094: Command line: '/usr/sbin/httpd'

访问日志

90.152.127.182 - - [24/Jan/2017:16:21:03 +0000] "GET / HTTP/1.1" 400 437 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" 
90.152.127.182 - - [24/Jan/2017:16:21:04 +0000] "GET /favicon.ico HTTP/1.1" 400 437 "http://xxx.yyy.com/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"

ssl_访问日志

90.152.127.182 - - [24/Jan/2017:16:12:24 +0000] "GET / HTTP/1.1" 400 434 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" 
90.152.127.182 - - [24/Jan/2017:16:12:25 +0000] "GET /favicon.ico HTTP/1.1" 400 434 "https://xxx.yyy.com/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"

什么可能导致我的 400 状态?在你问之前,我已经安装了mod_ssl,是的。

答案1

确保您的虚拟主机中没有非法字符ServerName

我在将“sub_domain.test.com”从 Apache 2.2 迁移到 2.4 时遇到了这个问题。

下划线in “sub_domain” 导致 Apache 2.4 做出响应,400 (Bad Request)但错误日志中没有进一步提示。

还可以看看https://stackoverflow.com/questions/2180465/can-domain-name-subdomains-have-an-underscore-in-it

答案2

我也有同样的问题。我怀疑其中包含此修复程序:CVE-2016-8743 对请求行和请求标头强制执行与 RFC7230 相对应的 HTTP 请求语法,以防止恶意客户端或下游代理的响应拆分和缓存污染。

相关内容