nginx 200OK wirte 시점

sysmoon의 이미지

안녕하세요
back-end 서버 플랫폼을 운영중입니다.
nginx 서버의 access log를 살펴보면 http request(get/post)에 대한 200OK 메시지들이 찍히는데, 200OK 메시지는 TCP 핸드쉐이크 과정에서 단말이 보내는 ACK를 최종적으로 받고 찍는걸까요?

이런 질문을 드린 이유는 서버는 200OK를 단말에 보낸 로그가 남아있는데 단말이 못 받은 경우가 가끔 발생합니다.
그래서 서버에서 200OK를 찍는 경우가 단말이 정확히 200OK를 수신했다는 것을 확인한 후에 찍는건지, 아니면 nginx socket 단에서 200OK 전송만 하고 바로 찍는건지 알고싶네요.

김정균의 이미지

ack를 받았느냐 못받았느냐는 kernel level에서 처리가 되는 일이니 ngix는 알 수가 없겠죠. :-) raw socket으로 짜여져 있다면 모르겠지만 말이죠... (ngix 코드를 보지는 않아서..)

모지리의 이미지

nginx 서버 소스를 보지는 않았지만 상식적으로만 생각하면

1. 전송후 로그를 찍을겁니다.
2. TCP 스텍쪽과는 상관없는 부분.

1번의 경우 전송 확인 여부인데요. 상대측 커널까지 들어 가면 정상 전송으로 판단되어 전송 로그가 찍힐겁니다. 이럴 경우 클라이언트 유저 에플리케이션에서 수신 처리가 잘못되어 못받는 경우가 생기지 않을까 생각되어집니다.

dongseob.park의 이미지

TCP 레이어에서 쓰이는 ACK가 아닙니다. HTTP 프로토콜 선상에서 적법한 요청인 경우 200 OK를 출력합니다.(200이 성공했다는 코드입니다.)