Nginx와 Tomcat 연동 방법

Nginx는 강력한 리버스 프록시 서버로, Tomcat과 연동하여 웹 애플리케이션을 배포하는 데 자주 사용됩니다. 이번 포스트에서는 아래 Nginx 설정을 기반으로 Tomcat과의 연동을 설명하겠습니다.



1. Nginx 설정 개요

아래는 우리가 사용할 Nginx 설정 파일입니다.

http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream tomcat { server 127.0.0.1:8080; # Tomcat 서버의 주소와 포트 } server { listen 80; server_name localhost; location / { proxy_pass http://tomcat; # 위에서 정의한 upstream 서버로 요청 전달 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } }

이제 각 설정의 의미를 하나씩 살펴보겠습니다.



2. http 블록 설정

① MIME 타입 설정

include mime.types; default_type application/octet-stream;
  • include mime.types : Nginx가 파일의 확장자를 보고 적절한 MIME 타입을 적용할 수 있도록 설정합니다.

  • default_type application/octet-stream : MIME 타입이 정의되지 않은 경우 기본적으로 바이너리 파일로 처리합니다.

② 파일 전송 최적화

sendfile on;
  • sendfile on : Nginx가 파일을 직접 전송하여 성능을 향상시킵니다.
    (이를 사용하면 커널 레벨에서 파일 전송이 이루어져 더 효율적입니다.)

③ Keep-Alive 설정

keepalive_timeout 65;
  • keepalive_timeout 65 : 클라이언트가 연결을 유지하는 시간을 65초로 설정합니다.
    (Keep-Alive가 활성화되면 여러 개의 요청을 하나의 연결에서 처리하여 성능이 향상됩니다.)



3. upstream 블록 (Tomcat 연결 설정)

upstream tomcat { server 127.0.0.1:8080; # Tomcat 서버의 주소와 포트 }
  • upstream tomcat : Tomcat 서버를 위한 로드 밸런싱 그룹을 설정합니다.

  • server 127.0.0.1:8080; : Tomcat이 127.0.0.1(로컬호스트)에서 8080 포트로 실행되고 있음을 나타냅니다.
    (만약 Tomcat이 다른 서버에서 실행 중이라면 해당 서버의 IP를 입력하면 됩니다.)



4. server 블록 (Nginx가 클라이언트 요청을 처리하는 방법 설정)

server { listen 80; server_name localhost;
  • listen 80; : Nginx가 80 포트에서 요청을 수신하도록 설정합니다.

  • server_name localhost; : 이 서버 블록이 처리할 도메인을 지정합니다.



5. location 블록 (리버스 프록시 설정)


location / { proxy_pass http://tomcat; # 위에서 정의한 upstream 서버로 요청 전달 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
  • proxy_pass http://tomcat;

    • 클라이언트가 / 경로로 요청을 보내면 Tomcat(8080 포트)로 전달됩니다.

  • proxy_set_header Host $host;

    • 원본 요청의 Host 헤더를 유지합니다.

  • proxy_set_header X-Real-IP $remote_addr;

    • 클라이언트의 실제 IP를 Tomcat에 전달합니다.

  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    • 여러 개의 프록시 서버를 거친 경우에도 원본 클라이언트의 IP를 추적할 수 있도록 합니다.

  • proxy_set_header X-Forwarded-Proto $scheme;

    • 클라이언트의 요청이 HTTP인지 HTTPS인지 Tomcat이 알 수 있도록 합니다.



6. 설정 적용 및 테스트

설정을 적용하기 위해 Nginx를 다시 시작합니다.

sudo systemctl restart nginx

이제 브라우저에서 http://서버_IP:80을 입력하면 Tomcat의 기본 페이지가 보이면 성공적으로 연동된 것입니다.



7. 결론

이 설정을 통해 Nginx는 Tomcat과 연동되어 클라이언트 요청을 받아 Tomcat으로 전달하는 역할을 합니다.
이를 통해 웹 서버의 성능을 개선하고 보안을 강화할 수 있습니다.

추가적으로,

  • SSL 설정을 추가하여 HTTPS를 적용하거나,

  • 로드 밸런싱을 활용하여 다수의 Tomcat 서버에 트래픽을 분산할 수도 있습니다.