>  기사  >  운영 및 유지보수  >  Linux 서버 nginx 액세스 로그에서 다수의 http 400 오류를 해결하는 방법

Linux 서버 nginx 액세스 로그에서 다수의 http 400 오류를 해결하는 방법

WBOY
WBOY앞으로
2023-05-21 19:28:042736검색

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.242 – – [27/oct/2014:14:31:45 +0800 ] “-” 400 0 “-” “-”
124.65.133.242 – – [27/oct/2014:14:31:45 +0800] “-” 400 0 “-” “-”

나오세요

nginx 로그 파일을 분석한 결과, 정상적인 방문 후에도 몇 개의 400 오류가 발생하는 것으로 나타났습니다. 매번 약 1~6개의 연속 오류가 있었고, 고객이 방문할 때마다 400 오류가 발생하지 않았습니다.

400 오류가 발생한 이전 액세스를 관찰하는 것은 정상입니다. 200 상태 코드, 일반 파일, 일반 원본, 일반 사용자 에이전트... 모든 것이 조화로운데 400 오류는 왜 발생했을까요?

주의 깊게 관찰한 결과, 400에러를 발생시킨 이전 방문의 User-Agent는 모두 구글 크롬 브라우저에 남겨져 있는 것을 발견했습니다. 이는 400에러가 크롬 브라우저에서 발생했다는 의미입니다. 그러나 로컬 패킷 캡처 이후 크롬은 서버에 비정상적인 요청이나 데이터 패킷을 보내지 않은 것으로 확인됐다.

패킷 캡처 분석에서 Chrome은 서버에 액세스할 때 일반적으로 5~6개의 연결을 두 개 이상 시작한 것으로 나타났습니다. 요청한 리소스에 그렇게 많은 연결이 필요하지 않은 경우 Chrome은 사용되지 않는 연결을 닫습니다. 사전 연결이라고 합니다.

보통 웹사이트를 방문할 때 가장 먼저 얻는 것은 웹페이지에 필요한 CSS, js, 그림 등과 같은 다른 미디어 리소스 파일에 대한 링크가 포함된 기본 html 파일입니다. 기본 html 파일은 하나에 있습니다. 도메인에서 사전 연결은 다른 파일을 얻기 위해 서버에 연결하기 전에 html 파일을 얻기 위해 기다리는 대신 html을 얻기 전에 많은 tcp 연결을 설정하는 것을 의미합니다. 언젠가 이 기술은 웹 페이지 렌더링 속도를 크게 향상시킬 수 있습니다.

웹 페이지 HTML 링크의 리소스가 상대적으로 작거나 클라이언트에 캐시가 있고 다운로드를 위해 연결할 필요가 없는 경우 Chrome 브라우저에서 발행한 5-6개의 연결 중 하나만 필요할 가능성이 높습니다. , 나머지는 이런 방식으로 닫아야 합니다. 문제가 발생합니다. 서버가 요청을 보내지 않고 연결됩니다. 이 경우 nginx는 이를 400 오류로 처리하지만 연결이 닫혀서 오류 메시지가 클라이언트로 전송되지 않습니다. 이로 인해 로그 파일에는 오류가 기록되지만 아무것도 볼 수 없습니다. 패킷 캡처 분석.

Test
위 분석 결과를 확인하는 방법은 매우 간단합니다. cmd.exe 명령줄을 열고 telnet serverip 80을 입력한 후 연결이 성공할 때까지 기다린 후 cmd를 직접 닫습니다. 400 오류 기록.

댓글 하나
사전 연결의 장점은 이미 매우 명확하지만 웹마스터가 이를 최적화했거나 쿠키 없는 기술을 사용했거나 웹 페이지 및 정적 리소스에 대해 다른 서버를 사용했다면 단점도 있습니다. 웹페이지 필수 css, js 리소스가 메인 html과 동일한 도메인에 있지 않고, 동일한 IP에 없을 수도 있으므로 사전 연결은 쓸모가 없을 뿐만 아니라 메인 html 서버에 불필요한 부담을 줍니다.

그 밖의 이유

인터넷에서 많은 분들이 관련 글을 작성해 오셨는데, 헤더의 크기가 400을 초과하여 잘못된 요청이라는 반응이 나오는 경우가 대부분입니다. , 포트와 같은 또 다른 가능성이 있습니다. 테스트 도구는 포트가 활성 상태인지 확인합니다. lvs와 같은 것도 이런 종류의 문제를 일으킬 수 있으며, 그러면 로그에 400 오류가 많이 나타납니다.

위 문제의 경우 nginx.conf에서 client_header_buffer_size와 Large_client_header_buffers를 모두 늘려 이 문제를 완화할 수 있습니다.

위 내용은 Linux 서버 nginx 액세스 로그에서 다수의 http 400 오류를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제