본문 바로가기
프로그래밍/리눅스

프로그래밍 「 리눅스 편」여러 앱에서 dockerized nginx를 사용하여 역방향 프록시를 구현하기 위한 실용적인 가이드

by grapedoukan 2023. 6. 11.
728x90

Nginx 역방향 프록시

이 기사에서는 역방향 프록시라는 많은 서비스에서 사용되는 매우 일반적인 사례 아키텍처를 다루고 Nginx 서버를 사용하여 역방향 프록시를 설정하는 방법과 SSL 자격 증명이 있는 80 및 443 포트를 사용하여 단일 서버 인스턴스에서 여러 앱을 관리하는 방법에 대한 모든 세부 정보를 살펴보겠습니다.

우선, 아키텍처의 UML을 확인하고 실제로 어떻게 시연되는지 살펴 보겠습니다.

간단한 Nginx 역방향 프록시 UML

보시다시피, 우리는 여러 응용 프로그램을 가지고 있으며 비례하는 양의 도메인 또는 하위 도메인에 연결하고 싶지만 고전적인 작업 방식이라면 서버의 포트 80 및 포트 443을 조작하면 다음과 같은 해당 포트 번호와 함께 사용하지 않는 한 도메인 / 하위 도메인을 서버로 가리킬 수 없습니다.

my-website.com:8090

웹 서비스에 대한 사용자의 연결을 보호하기 위해 SSL 인증서를 사용해야하지만 그렇게 할 수 없기 때문에 정말 끔찍한 일입니다.

UML 다이어그램에 따르면 서버로 들어오는 요청을 처리하고 사용자가 전면의 영향을 받지 않고 트래픽을 적절한 애플리케이션으로 리디렉션하기 위해 Nginx 서비스를 감시자로 사용해야 합니다.

01 단계 :
서버의 루트 디렉토리에 폴더를 만들고 예를 들어 역방향 프록시와 같은 이름을 지정하고 아래와 같이 이동하십시오.

mkdir reverse-proxy
cd reverse-proxy

02 단계 :
폴더를 만들고 SSL 인증서와 키를 보관할 인증서 또는 원하는대로 호출하십시오.

mkdir certs

03단계:
nginx.conf 파일을 만들고 이 파일 안에 역방향 프록시 설정을 작성하므로 이것이 여기서 작업의 핵심입니다.

touch nginx.conf
# first.com
    server {
        listen 80;
        server_name www.first.com firstapp.com;
        location / {
            proxy_pass http://first_container:first_port;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
   server {
        listen 443 ssl;
        server_name www.first.com first.com;
        ssl_certificate /etc/nginx/certs/ssl_cert.crt;
        ssl_certificate_key /etc/nginx/certs/ssl_key.key;
        location / {
            proxy_pass http://first_container:first_port;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

# second.com
    server {
        listen 80;
        server_name www.second.com second.com;
        location / {
            proxy_pass http://second_container:second_port;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
   server {
        listen 443 ssl;
        server_name www.second.com second.com;
        ssl_certificate /etc/nginx/certs/ssl_cert.crt;
        ssl_certificate_key /etc/nginx/certs/ssl_key.key;
        location / {
            proxy_pass http://second_container:second_port;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

위의 코드에서 우리는 nginx에 first.com 통해 들어오는 트래픽을 감시하도록 지시하고 second.com 우리의 가상 도메인은 (하위 도메인으로도 수행 할 수 있음) 프록시는 도커 화 된 다른 응용 프로그램에 전달하고 특정 도커 컨테이너 이름을 가진 특정 포트를 가리키는 서버에서 실행 중입니다.

원하는대로 편집하고이 구성이 작동하도록 SSL 인증서를 certs 폴더에 업로드 한 다음 저장하는 것을 잊지 마십시오.

04 단계 :

이제 이 nginx를 서버에서 서비스로 사용하지 않고 대신 dockerized 앱으로 사용할 것이기 때문에 docker-compose 파일을 만듭니다.

touch docker-compose.yml
version: '3'

services:
  nginx:
    image: nginx:latest
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./certs:/etc/nginx/certs

networks:
  default:
    external:
      name: nginx-proxy-net

우리는 도커 허브의 최신 nginx 이미지를 사용하고 선택 사항인 컨테이너 nginx-proxy를 호출하고 있으며 원하는 대로 호출할 수 있습니다.
서버 포트 80에서 도커 호스트 포트 80으로, 도커 호스트의 포트 443에서 443으로 매핑하고 수신 대기합니다.

여기서 중요한 것은 nginx 역방향 프록시를 위한 네트워크를 만들고 이 모든 것이 작동하려면 모든 애플리케이션을 네트워크에 추가해야 하며 네트워크도 nginx-proxy-net이라고 부릅니다.

여기에서 모든 설정이 완료되었으므로 이제 nginx.conf 파일에 추가한 서버에서 해당 포트로 모든 애플리케이션의 도커 컨테이너를 실행해야 합니다.

모든 응용 프로그램을 실행 한 후, 당신은 nginx 역방향 프록시 컨테이너를 실행해야합니다, 모든 것이 올바르게 수행되면, 이제 당신은 포트 80 및 443에서 수신 대기 SSL 인증서와 nginx 역방향 프록시는 트래픽을 처리합니다 서버를 통해 각 응용 프로그램에 발송합니다.

sudo docker-compose up -d

역방향 프록시 docker-compose 파일에서 이름을 지정한 프록시 네트워크에 앱의 컨테이너를 추가해야 한다는 것을 잊지 마세요.

728x90