nginx : 모든 헤더와 함께 완전한 요청 / 응답을 기록합니까?


44

때때로 중단되는 응용 프로그램 서버가 있습니다. 클라이언트의 요청이 잘못되었다고 의심됩니다.

nginx가 전체 요청 / 응답 (피들러 캡처와 같은)을 파일에 기록 할 수 있습니까? 그래서 중단 전에 보낸 요청을 볼 수 있습니까?

(아마도 pcap과 그 접근 방식을 피하고 nginx에서 모두 수행해야합니다)

nginx가이 도구에 적합한 도구가 아닌 경우 네트워크 분석기 이외의 다른 도구는 무엇입니까?


1
리버스 프록시 모드의 mitmproxy 는 원하는 것을 수행해야합니다.
Vivek Thomas

@VivekThomas 이것은 nginx 질문입니다 .... 우리는 이미 nginx를 사용하고 있으며 변경되지 않습니다.
samsmith

3
@samsmith 오래된 질문이지만 다른 사람에게 도움 이 될 수 있습니다. nginx를 포기할 필요가 없습니다 . 상황에 따라, miginproxy가 트래픽을 가로 채고 디버깅을 지원할 수 있도록 nginx를 일시적으로 다른 포트로 다시 라우팅 할 수 있습니다. 그런 다음 완료되면 nginx를 원래 포트로 다시 라우팅하고 mitmproxy를 종료하면됩니다.
Per Lundberg

1
전체 요청 / 응답을 기록 할 수있는 modsecurity
Willem

답변:


44

방문자가 요청 본문을 보내려면 client_body_in_file_only on;var $request_body_file를 로그 형식 에 추가하여 로그에 작성된 "임시"파일을 사용 하고 기록하십시오 . "임시"파일은 기본적으로 client_temp 디렉토리에 있습니다.

요청 헤더 $http_<header>도 기록하고로 헤더를 보냈습니다 $sent_http_<header>.

요청 본문과 헤더가있는 경우 요청 본문과 헤더를 재생하고 방문자의 응답을 얻을 수 있어야합니다.

또한 gor 와 같은 것을 고려해야합니다. 다른 환경에서 트래픽을 재생할 수 있으므로 프로덕션 환경에서 IO 문제를 일으키지 않고 nginx가 이러한 임시 파일을 작성할 수 있습니다 (nginx는 그 on값을 제거 하지 않습니다. 그 이유는 "임시"가 아닙니다. 이 경우).


1
@jwadsack 답을주의 깊게 읽으십시오.
Xavier Lucas

4
@ XavierLucas 두 가지 접근 방식을 제공한다고 생각했습니다. 난 당신이 말을했다 몰랐어요 모두 client_body_in_file_only 하고 $http_<header>필요할 것이다. 나는 지금 그것을 얻는다.
jwadsack

5
더 정확한 코드를 공유해 주시겠습니까?
Velkan

3
분명히 $ http <header>는 모든 헤더 이름을 미리 알고있는 경우에만 유용합니다
Ed Randall

2
누군가 nginx 설정의 실제 조각을 공유 할 수 있습니까?
Nowaker

17

mitmproxy 는 원하는 것을 수행하는 데 적합한 도구 인 것 같습니다.

mitmproxy는 콘솔 인터페이스를 사용하는 HTTP 용 대화식 SSL 가능 man-in-the-middle 프록시입니다.

mitmdump는 mitmproxy의 명령 행 버전입니다. tcpdump를 HTTP로 생각하십시오.

풍모

  • HTTP 요청 및 응답을 가로 채고 즉시 수정하십시오.
  • 나중에 재생하고 분석 할 수 있도록 완전한 HTTP 대화를 저장하십시오.
  • HTTP 대화의 클라이언트 측을 재생하십시오. 이전에 기록 된 서버의 HTTP 응답을 재생합니다.
  • 트래픽을 지정된 서버로 전달하려면 프록시 모드를 반전시킵니다.
  • OSX 및 Linux의 투명 프록시 모드.
  • Python을 사용하여 HTTP 트래픽을 스크립트로 변경하십시오.
  • 차단을위한 SSL 인증서는 즉시 생성됩니다.

리버스 프록시 모드를 사용하면 Fiddler와 마찬가지로 요청 및 응답을 캡처 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.