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:大約 85% 的所有 400 錯誤。
這是完整的日誌:
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
這很可能是由客戶端引起的,而不是由伺服器引起的(嗯,它可以是間接的)。如果它不僅僅是一個格式錯誤的 url(一個在能夠觸發 404 之前被 400 阻止的 URL),在 99% 的情況下,這是由
- 損壞的 cookie(例如可能由擴展程序引起)
- 被阻止的 cookie
- cookie 過多(某些瀏覽器會阻止大量 cookie)
- 客戶嘗試欺騙性請求(我無意中假設)
如果您想測試被阻止的 cookie 假設,請在瀏覽器上阻止 cookie 並查看是否收到 400 錯誤,其餘的有點棘手,請參閱:https ://airbrake.io/blog/http-errors/400-錯誤的請求
既然您已經說過刷新 cookie 可以解決問題,我會假設它與 cookie 相關。
編輯:
我有另一個角度:請求通過 http(未加密),並包含一個帶有 GET 請求的引薦來源網址,其中包含字元串“使用者名”。這實際上使訪問該站點的使用者在其標頭中具有該引薦來源地可辨識,更重要的是,該請求可以由中間的人以明文形式查看。
由於Google已經對未加密的 http 流量發起了一場戰爭,我可以假設 Chrome 會導致一些問題。這只是一個假設,我無法證實或支持它。但值得一試,因為無論如何您都應該加密您的流量。
您是否在伺服器上設置了 https,如果有,您可以嘗試在使用 https 時重現相同的錯誤嗎?