首頁 運維 Nginx Linux伺服器nginx存取日誌裡出現大量http 400錯誤怎麼解決

Linux伺服器nginx存取日誌裡出現大量http 400錯誤怎麼解決

May 21, 2023 pm 07:28 PM
linux nginx

Linux服务器nginx访问日志里出现大量http 400错误怎么解决

伺服器中的錯誤記錄類似於這種:

124.65.133.242 – – [27/oct/2014:14:30:51 0800] “-” 400 0 “-” “-”
124.65.133.242 – – [27/oct/2014:14:31:45 0800] “-” 400 0 “-” “-”
#124.65.133 [.24222422 – –”
#124.65.133 [. 27/oct/2014:14:31:45 0800] “-” 400 0 “-” “-”

124.65.133.242 – – [27/oct/2014:14:31:45 0800] “-” 400 0 “-” “-”

踩點

經過分析nginx的log文件,發現都是在一次正常存取之後產生的數個400錯誤,每次有大概連續出現1-6個不等,也並不是每次客戶造訪都會產生400錯誤。

再觀察產生400錯誤的前一次訪問是很正常的,200狀態碼,正常的文件,正常的來路,正常的user-agent… 一切都很和諧,那400是腫麼來的呢?

透過仔細觀察發現,所有產生400錯誤的前一次訪問的user-agent都是google chrome瀏覽器留下的,也就是說400錯誤是由chrome瀏覽器產生的。但是經過本地抓包發現,chrome是沒有向伺服器發送異常請求或資料包的。

在抓包分析中發現,chrome在存取伺服器時發起的連線不只一個,一般有5到6個不等,而如果請求的資源不需要那麼多連線時,chrome就會關閉未用的連接,這項技術叫做pre-connection「預先連接」。

通常我們造訪一個網站時,第一個取得的是一個html主文件,而裡面連結了網頁所需的css、js、圖片等其他媒體資源文件,而一般資源檔案和主html文件是在一個網域下的,預先連接就是在取得html之前就建立很多的tcp連接,而不是等到取得到html檔案之後再去連接伺服器取得其他的文件, 因為連接伺服器是需要消耗一些時間的,所以這項技術可以很大程度地加快網頁的呈現速度。

如果網頁html連結的資源比較少,或是客戶端有緩存,不需要連線下載,那麼chrome瀏覽器發出的5-6個連線很可能只有1個是需要的,其他的都得關閉掉,這樣就產生了一個問題:連接了伺服器,而沒有發送任何請求。對於這種情況,nginx是當做400錯誤來處理的,但由於連接已經關閉,錯誤訊息不會發送到客戶端,這就產生了日誌檔案中記錄了錯誤,而抓包分析中什麼也看不到的現象。


測試

要驗證上面的分析結果很簡單,打開命令列cmd.exe,在裡面輸入telnet serverip 80,等待連線成功之後直接關掉cmd,這時去查看nginx的log檔案中就多了一筆400錯誤記錄。


一句評論

pre-connection的優點已經很清楚了,但是它也是有缺點的,如果站長做了優化,使用了cookie-free技術,或者網頁和靜態資源使用不同的伺服器,那麼網頁需要的css、js資源就和主html不在同一個網域下,也可能不在同一個ip上,那麼pre-connection不僅是雞肋,而且會對主html伺服器產生不必要的負擔。

其它原因

網路上很多人寫過相關的文章,大多的人的原因是因為header 的頭部大小超了,引起回應400 告訴是bad request.但其實還有一種可能,就是像埠測試工具,只是檢查埠是否是活的。像 lvs 之類什麼的,也會造成這種問題,然後日誌中會出現大量的 400 錯誤。

對於上述問題可以在nginx.conf中,將client_header_buffer_size和large_client_header_buffers都調大,可緩解此問題。 ###

以上是Linux伺服器nginx存取日誌裡出現大量http 400錯誤怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

Linux的主要目的是什麼? Linux的主要目的是什麼? Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

VSCode怎麼用 VSCode怎麼用 Apr 15, 2025 pm 11:21 PM

Visual Studio Code (VSCode) 是一款跨平台、開源且免費的代碼編輯器,由微軟開發。它以輕量、可擴展性和對眾多編程語言的支持而著稱。要安裝 VSCode,請訪問官方網站下載並運行安裝程序。使用 VSCode 時,可以創建新項目、編輯代碼、調試代碼、導航項目、擴展 VSCode 和管理設置。 VSCode 適用於 Windows、macOS 和 Linux,支持多種編程語言,並通過 Marketplace 提供各種擴展。它的優勢包括輕量、可擴展性、廣泛的語言支持、豐富的功能和版

sublime寫好代碼後如何運行 sublime寫好代碼後如何運行 Apr 16, 2025 am 08:51 AM

在 Sublime 中運行代碼的方法有六種:通過熱鍵、菜單、構建系統、命令行、設置默認構建系統和自定義構建命令,並可通過右鍵單擊項目/文件運行單個文件/項目,構建系統可用性取決於 Sublime Text 的安裝情況。

laravel安裝代碼 laravel安裝代碼 Apr 18, 2025 pm 12:30 PM

要安裝 Laravel,需依序進行以下步驟:安裝 Composer(適用於 macOS/Linux 和 Windows)安裝 Laravel 安裝器創建新項目啟動服務訪問應用程序(網址:http://127.0.0.1:8000)設置數據庫連接(如果需要)

git軟件安裝 git軟件安裝 Apr 17, 2025 am 11:57 AM

安裝 Git 軟件包括以下步驟:下載安裝包運行安裝包驗證安裝配置 Git安裝 Git Bash(僅限 Windows)

See all articles