Apache 日志中出现大量 400 错误

Apache 日志中出现大量 400 错误

我们很难调试网站上的 400 错误。我们有很多这样的错误:

10.0.0.1 - - [08/Oct/2018:14:28:07 +0200] 
"GET /les-news/palmares/detail/article/la-lettre-de-motivation-ideale-pour-une-demande-de-stage-5224/ 
HTTP/1.1" 400 131844 
"https://www.google.com/" 
"Mozilla/5.0 (Linux; Android 7.0; TECNO K7 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.91 Mobile Safari/537.36"

一位用户通过电子邮件报告了该问题,并通过在其浏览器中重置 cookie 解决了该问题,因为其他重置 cookie 是不够的(但我们不能确定是否正确完成)。

该平台相当复杂,由F5 负载均衡器,根据请求的路径转发到不同的服务器。

我首先想要的是能够重现该错误,因为当访问 URL 时我们没有任何错误,并且一切正常。

我们注意到大多数错误来自 Android/Chrome:约占所有 400 错误的 85%。

以下是完整日志:

timestamp   October 8th 2018, 16:26:52.000
version     1
 _id        BmQSVGYB5vF-Dw_g1gVi
 _index     f5_access-2018.10.08
 _score     - 
t _type     doc
t agent     Mozilla/5.0 (Linux; Android 8.1.0; MI 8 Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.91 Mobile Safari/537.36
client_ip   10.0.0.1
client_port     41,068
facility    local2
host        mydomain.fr
httpversion     1
id      2,503,307,391
length      0
logsource   mydomain.network.local
message     virtual=/Common/mydomain.fr_HTTP client_ip=10.0.0.1 client_port=41068 lb_server=10.153.161.12:80 host=mydomain.fr request_port=80 username= request="GET / HTTP/1.1" server_status=400 content_length=0 resp_time=23 user_agent="Mozilla/5.0 (Linux; Android 8.1.0; MI 8 Build/OPM1.171019.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.91 Mobile Safari/537.36" referer=http://mydomain.fr/article/100-millions-d-euros-sciences-po-lance-la-plus-grande-levee-de-fonds-de-son-histoire_095255b4-caef-11e8-896c-7d05c73a49da/ ID=2503307391 timestamp=2018-10-08T16:26:52+0200 pool=/Common/POOL_ETUDIANT_v2_nocache
pool        POOL_MYDOMAIN_v2_nocache
program     f5_access
referer     http://mydomain.fr/article/100-millions-d-euros-sciences-po-lance-la-plus-grande-levee-de-fonds-de-son-histoire_095255b4-caef-11e8-896c-7d05c73a49da/
request     /
request_port    80
server_ip   10.0.0.1
server_port     80
severity    Informational
status      400
stdstatus   4xx
stdvirtual  mydomain_fr_HTTP
tags        f5_access
time        23
timestamp   October 8th 2018, 16:26:52.000
type        f5_access
verb        GET
virtual     mydomain.fr_HTTP

答案1

这很可能是由客户端引起的,而不是由服务器引起的(当然,间接地也可以)。如果它不仅仅是格式错误的 URL(在能够触发 404 之前被 400 阻止的 URL),那么在 99% 的情况下,这是由

  • 损坏的 cookie(例如可能由扩展导致)
  • 阻止 Cookie
  • 太多 cookie(某些浏览器会阻止大量 cookie)
  • 客户端尝试欺骗性请求(我认为是无意的)

如果您想测试阻止 cookie 假设,请在浏览器上阻止 cookie,看看是否出现 400 错误,其余部分有点棘手,请参阅:https://airbrake.io/blog/http-errors/400-bad-request

既然您已经说过通过刷新 cookie 可以修复该问题,那么我认为该问题与 cookie 有关。

编辑:

我有另一个角度:请求是通过 http(未加密)进行的,并且包含带有字符串“用户名”的 GET 请求的引荐来源。这实际上使得访问带有该引荐来源的网站的用户在其标头中可识别,更重要的是,中间人可以以明文形式查看该请求。

由于 Google 已经开始了一场针对未加密 http 流量的战争,我可以假设 Chrome 会造成一些问题。不过这只是一个假设,我无法证实或支持这一点。但值得一试,因为无论如何你都应该加密你的流量。

您的服务器上是否设置了 https?如果是,您是否可以尝试在使用 https 时重现相同的错误?

相关内容