LabHub

Tomcat & nginx 운영 · nginx 리버스프록시 설정 · 실습

nginx 리버스프록시 구성하기

LabHub 에서 이어서 보기

목표

nginx 를 리버스프록시로 구성하고, 전달 헤더·타임아웃·본문 크기·압축·정적 분리·
접근 차단·로그 포맷을 실무 기준으로 설정할 수 있게 됩니다.

왜 중요한가

프록시 설정 여섯 줄은 외우는 게 아니라 없을 때 무슨 일이 나는지로 기억해야 합니다.
Host 를 안 넘기면 애플리케이션이 만드는 절대 URL 이 127.0.0.1:8080 이 되어
결제 콜백이 안 돌아옵니다. X-Forwarded-For 가 없으면 접속 이력이 전부 프록시 IP 라
감사에서 답할 말이 없습니다. X-Forwarded-Proto 가 없으면 리다이렉트 무한 루프가 납니다.
그리고 client_max_body_size 기본값 1MB 를 모르면, 백엔드 로그에 아무것도 안 남는
파일 업로드 장애로 며칠을 씁니다.

단계

0. 준비: Tomcat 을 기동하고 /opt/lab/samples/labhub-1.0.0.war
/opt/tomcat/webapps/labhub.war 로 배포해 두세요.
nginx 작업 디렉터리는 /root/ng 를 씁니다.
1. /root/ng/nginx.conf 를 작성하고 nginx 를 기동합니다.
8088 포트로 listen 하고 /http://127.0.0.1:8080 으로 프록시합니다.
http://127.0.0.1:8088/labhub/version 이 200 이어야 합니다.
2. 프록시 헤더 네 개를 설정하고 reload 합니다.
Host, X-Real-IP, X-Forwarded-For, X-Forwarded-Proto.
확인: curl -s http://127.0.0.1:8088/labhub/echo 의 JSON 에
x-forwarded-forx-forwarded-proto 가 있어야 하고,
host 값이 127.0.0.1:8080아니어야 합니다.
3. proxy_connect_timeout 3s, proxy_send_timeout 30s, proxy_read_timeout 60s
를 설정합니다.
4. client_max_body_size20m 으로 설정하고 reload 합니다.
5MB 본문 POST 는 413 이 아니어야 하고, 25MB 본문 POST 는 413 이어야 합니다.
5. gzip on, gzip_min_length 1000, gzip_vary on 을 설정하고
gzip_typesapplication/json 을 포함시킵니다.
curl -H 'Accept-Encoding: gzip' -I http://127.0.0.1:8088/labhub/big.html
응답에 Content-Encoding: gzip 이 있어야 합니다.
6. /root/ng/static/app.js 파일을 만들고(내용 자유),
/assets/ 경로로 서비스되게 설정합니다. 즉
http://127.0.0.1:8088/assets/app.js 가 200 이어야 하며,
응답 헤더에 Expires 또는 Cache-Control 이 있어야 합니다.
7. /manager/ 로 시작하는 모든 요청이 403 을 반환하도록 설정합니다.
http://127.0.0.1:8088/manager/html 이 403 이어야 합니다.
8. log_format 을 정의해 $upstream_addr, $upstream_status,
$upstream_response_time, $request_time 네 변수를 포함시키고,
액세스 로그를 /root/ng/logs/access.log 에 남깁니다.
reload 후 요청을 한 번 보내 로그가 실제로 쌓여야 합니다.

참고

단계 8개

  1. 최소 프록시 설정과 기동
  2. 전달 헤더 설정
  3. 프록시 타임아웃 3종
  4. 요청 본문 크기 제한
  5. 응답 압축
  6. 정적 파일 분리
  7. 관리자 경로 차단
  8. 장애 분석용 로그 포맷