Tomcat & nginx 운영 · nginx 리버스프록시 설정 · 퀴즈
퀴즈: nginx 리버스프록시
문항 7개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
`proxy_set_header Host $host;` 가 없을 때 실제로 발생하는 문제는?
- 백엔드가 받는 Host 가 내부 주소가 되어, 리다이렉트·콜백 URL 이 내부 주소로 나간다
- 프록시가 백엔드의 가상 호스트를 못 찾아 연결 자체가 실패한다
- 응답 헤더의 Vary 가 어긋나 gzip 압축이 적용되지 않는다
- 요청을 구분할 키가 없어 액세스 로그에 호스트가 비어 남는다
TLS 를 프록시에서 종료하고 백엔드에는 HTTP 로 넘길 때 리다이렉트 무한 루프가 생기는 원인은?
- 백엔드가 평문으로 받았다고 보고 https 로 되돌리는데, 그 판단을 바꿀 헤더가 없어서
- 중간 인증서가 빠진 체인이라 클라이언트가 재협상을 반복하기 때문에
- 응답을 기다리는 시간이 짧아 프록시가 요청을 다시 보내기 때문에
- 압축 협상 헤더가 어긋나 클라이언트가 요청을 다시 만들기 때문에
`location /api/ { proxy_pass http://backend/; }` 설정에서 `/api/users/1` 요청이 백엔드에 전달되는 경로는?
- /api/users/1 — 경로가 그대로 전달된다
- /api/api/users/1 — location 경로가 한 번 더 붙는다
- /users/1 — 매칭된 /api/ 가 잘려 나간다
- / — proxy_pass 에 적은 경로만 전달된다
파일 업로드 시 413 오류가 나는데 애플리케이션 로그에는 아무 기록이 없습니다. 가장 유력한 원인은?
- 애플리케이션 로그 레벨이 낮아 업로드 실패가 기록되지 않았다
- nginx 의 client_max_body_size(기본 1MB)를 넘겨 nginx 가 직접 응답했다
- 임시 파일을 쓸 디스크가 부족해 저장 단계에서 조용히 실패했다
- 톰캣 스레드가 모자라 요청이 큐에서 대기하다 끊겼다
액세스 로그에서 `$request_time` 은 큰데 `$upstream_response_time` 은 작습니다. 무엇을 의미할까요?
- 백엔드 애플리케이션의 처리 자체가 느려 응답이 늦게 시작됐다
- 백엔드가 부른 DB 쿼리가 느려 응답 생성에 시간이 걸렸다
- 백엔드는 빨리 답했고, 지연은 클라이언트 네트워크나 전송 구간에 있다
- 프록시 설정이 잘못돼 두 값이 서로 다른 요청을 가리키고 있다
`gzip_vary on;` 을 설정하는 이유는?
- 압축률을 높이기 위해
- 중간 캐시가 압축된 응답을 압축을 지원하지 않는 클라이언트에게 전달하는 것을 막기 위해
- CPU 사용량을 줄이기 위해
- gzip_types 를 자동 설정하기 위해
톰캣 매니저 화면 차단을 애플리케이션이 아니라 nginx 에서 하는 실무적 이점은?
- 애플리케이션 재배포 없이 reload 만으로 정책을 바꿀 수 있기 때문
- nginx 가 더 빠르게 처리하기 때문
- 톰캣이 접근 제어를 지원하지 않기 때문
- 로그가 남지 않기 때문