LabHub

nginx 장애 대응 · 502 와 504 를 증거로 가른다 · 퀴즈

퀴즈: 502 · 504 와 에러 로그 서명

LabHub 에서 이어서 보기

문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.

  1. error.log 에 `connect() failed (111: Connection refused) while connecting to upstream` 이 찍히고 클라이언트는 502 를 받았다. 가장 효과가 없는 조치는?

    1. `proxy_read_timeout` 을 30s 로 올린다
    2. 업스트림 프로세스가 그 포트에 실제로 LISTEN 중인지 확인한다
    3. `proxy_pass` 가 가리키는 주소와 포트가 맞는지 확인한다
    4. 업스트림 앞단에 방화벽이나 정책이 끼어 있는지 확인한다
  2. 504 두 건의 error.log 가 아래와 같다. 무엇이 다른가? ① `upstream timed out (110: Connection timed out) while connecting to upstream` ② `upstream timed out (110: Connection timed out) while reading response header from upstream`

    1. ①은 이름 해석에 실패했고 ②는 TCP 연결 자체에 실패한 것이다
    2. ①은 연결 단계, ②는 응답 헤더 대기 단계에서 시간이 초과됐다
    3. ①은 업스트림이 보낸 코드이고 ②는 nginx 가 스스로 만든 코드다
    4. 둘은 같은 상황이며 nginx 버전에 따라 문구만 달라진 것이다
  3. `/hang/` 블록에 `proxy_read_timeout 30s;` 를 넣었는데도 요청이 2 초 만에 504 로 끊긴다. 가장 그럴듯한 설명은?

    1. reload 를 하지 않아 설정이 반영되지 않았다
    2. location 블록 안의 타임아웃은 http 블록 값에 덮어써진다
    3. 업스트림이 2 초 만에 커넥션을 끊었기 때문에 읽기 타임아웃과 무관하다
    4. 연결 단계에서 `proxy_connect_timeout` 이 먼저 걸렸다
  4. 헬스체크는 계속 정상인데 SSO 로 로그인한 일부 사용자만 502 를 받는다. error.log 에는 `upstream sent too big header` 가 있다. 원인은?

    1. 그 사용자들의 요청이 다른 업스트림으로 분배되고 있다
    2. 응답 헤더가 `proxy_buffer_size` 를 넘겼다
    3. 세션 쿠키가 만료되어 업스트림이 빈 응답을 돌려준다
    4. 업스트림의 스레드풀이 포화되어 헤더를 다 못 보냈다
  5. `proxy_buffer_size` 를 16k 로 올렸더니 nginx 가 `"proxy_busy_buffers_size" must be less than the size of all "proxy_buffers" minus one buffer` 로 기동을 거부한다. 무엇을 해야 하나?

    1. `proxy_busy_buffers_size` 를 0 으로 명시한다
    2. `proxy_buffering` 을 off 로 바꾼다
    3. `proxy_buffers` 도 함께 키운다
    4. `proxy_buffer_size` 를 4k 로 되돌리고 업스트림에서 헤더를 줄인다
  6. 액세스 로그에 `413 ut=- rt=0.002 us=- "POST /upload HTTP/1.1"` 이 남았다. 애플리케이션 로그를 뒤졌더니 이 요청이 없다. 어떻게 판단해야 하나?

    1. 애플리케이션 로그 수집이 누락된 것이므로 로그 파이프라인을 먼저 본다
    2. 업스트림이 요청을 받고도 로그를 남기지 않은 것이므로 앱 설정을 본다
    3. `ut` 와 `us` 가 대시이므로 요청이 업스트림에 간 적이 없다
    4. 413 은 업스트림이 돌려준 코드이므로 업스트림 설정을 본다