[Docker] Nginx와 Tomcat 연결

fever·2025년 3월 6일
0

🖥️ Docker

목록 보기
1/1
post-thumbnail

1. Docker에 Nginx 컨테이너 올리기

  • Nginx 올리기
    docker run --name nginx -d -p 80:80 -p 443:443 nginx

  • 접속
    docker exec -it nginx /bin/bash

  • conf 설정 (include 설정 추가)
    vi /etc/nginx/nginx.conf

2. Docker에 tomcat, java 이미지 설치

  • 원하는 설정에 맞춰서 톰캣과 자바를 설치
    docker pull tomcat:10.1.30-jdk17-temurin-noble

3. Docker에 tomcat 컨테이너 올리기

  • 호스트 포트 및 컨테이너 포트 설정 후 올리기
    docker run -d -p 8080:8080 --name tomcat-container tomcat:10.1.30-jdk17-temurin-noble

4. Nginx conf 설정

  • includ에 설정한 위치에 설정 conf 생성
  • 포워딩 주소 및 도메인 설정

proxy_set_header X-Real-IP $remote_addr;
클라이언트의 실제 IP 주소를 백엔드 서버로 전달
이 설정을 생략하면 백엔드 서버에서 클라이언트의 실제 IP를 알 수 없고, 대신 프록시 서버의 IP 주소만 보이게 되어, 원본 클라이언트의 IP를 추적할 수 없음.

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
클라이언트의 IP 주소를 X-Forwarded-For 헤더에 추가
이 헤더를 설정하지 않으면, 백엔드 서버가 요청의 출처 IP를 알 수 없게 되어, 클라이언트의 실제 IP를 파악할 수 없음

proxy_set_header X-Forwarded-Port $server_port;
요청을 받은 서버의 포트 번호를 X-Forwarded-Port 헤더로 전달
이 설정을 하지 않으면, 백엔드 서버에서 요청이 들어온 포트를 알 수 없어서, 요청이 어떤 포트로 들어왔는지 확인할 수 없음.

proxy_set_header X-Forwarded-Proto $scheme;
요청이 HTTPS인지 HTTP인지 구분할 수 있도록 X-Forwarded-Proto 헤더를 전달
이 헤더가 없으면 백엔드 서버는 요청이 HTTP로 전달되었는지 HTTPS로 전달되었는지 알 수 없어서 보안이나 리디렉션 관련 로직에서 문제가 발생할 수 있음

proxy_set_header X-Forwarded-Host $Host;
클라이언트가 요청한 원래의 호스트 이름을 X-Forwarded-Host 헤더로 전달
이 헤더가 없으면, 백엔드 서버가 원래 요청된 호스트 이름을 알 수 없어, 동적 도메인 기반 로직이 제대로 작동하지 않을 수 있음

proxy_set_header Host $http_host;
클라이언트가 요청한 호스트를 Host 헤더로 전달하고 $http_host는 클라이언트의 요청에 포함된 호스트 정보를 나타냄
이 설정을 하지 않으면, 백엔드 서버가 요청에 대한 정확한 호스트를 알 수 없고, 이는 다중 도메인을 사용하는 시스템에서 중요한 정보를 잃게 될 수 있음

profile
선명한 삶을 살기 위하여

0개의 댓글