접속 도메인에 따라 포트포워딩
우리 파이서버에는 두개의 웹 애플리케이션이 돌아가고 있다.
둘 다 브라우저를 통해 80포트로 접속하게 되어있었기 때문에, 접속 도메인에 따라 포트포워딩(혹은 다른 컨테이너로 매핑)을 해줄 필요가 있었다.
다음 예제처럼 Nginx 세팅을 함으로써 가능하다.
server_name에 도메인 지정해서 분류가 되는 구조이다.
단! 중요한 것은 Nginx 컨테이너와 AAAAA, BBBBB 컨테이너가 동일한 도커 네트워크로 존재해야 한다는 것이다.
만약 서로 다른 네트워크에 있어서 Nginx에서 AAAAA 컨테이너를 찾지 못한다면 Host not found in upstream 오류가 뜬다.
Nginx가 다른 컨테이너를 스캔할 수 있는 구조인지 미리 검토해보도록 하자.
# AAAAA 컨테이너
upstream AAAAA { // 업스트림명
server AAAAA:8081; // 컨테이너명과 포트
}
# BBBBB 컨테이너
upstream BBBBB {
server BBBBB:3000;
}
# CCCCC 컨테이너
upstream CCCCC {
server CCCCC:8080;
}
# A 도메인으로 접속
server {
listen 80;
server_name AaAaA.site www.AaAaA.site;
location / {
proxy_pass http://AAAAA;
...
}
...
}
# B 도메인으로 접속
server {
listen 80;
server_name *.BBBBbbbbBBB.com;
location / {
proxy_pass http://BBBBB;
...
}
...
}
# ip를 직접 입력해 접속하는 경우 BBBBB 업스트림으로 매핑하고자 함
server {
listen 80 default_server;
server_name _;
location / {
proxy_pass http://BBBBB;
...
}
...
}
연결하려는 컨테이너는 Nginx 컨테이너와 동일한 도커 네트워크여야 한다.
만약 docker compose를 사용하고 있고, 다른 compose 구성의 컨테이너와도 매핑이 되어야 한다면,
매번 도커 네트워크를 생성하는 것이 아니라 네트워크에 external true 옵션을 줘서 기존의 network를 사용하도록 해야 한다. 다음은 backbone이라는 이름을 가진 기존 네트워크를 사용하도록 docker-compose.yml에 작성한 내용이다.
참고로 호스트 시스템에서 도커 네트워크를 생성하는 방법은, 예를 들어 backbone이라는 이름의 도커 네트워크를 생성하고자 한다면 docker network create backbone 명령을 입력하다. 세부 옵션 지정은 설명 패스!
networks:
backbone:
# driver: bridge <- 기존
external: true <- 변경 (기존 네트워크 사용)
services:
AAAAA:
networks:
- backbone
...
BBBBB:
networks:
- backbone
...
(나같은 경우도 서로 다른 docker compose 구성의 컨테이너들을 Nginx에서 매핑해줘야 하는 구조였기 때문에 동일한 도커 네트워크상에 있어야 한다는 것이 중요했다!)
'미분류글' 카테고리의 다른 글
Redis Stream의 구조적 특징(Message Queue) (2) | 2024.08.26 |
---|---|
[IntelliJ] 폐쇄망 개발환경 세팅 (0) | 2024.08.21 |
java.rmi.server.ExportException: Listen failed on port: 0; (0) | 2024.06.14 |
하나의 서버 인스턴스에 운영 및 테스트서버 두기 (0) | 2024.06.07 |
[UNGRMR 글쓰기 클럽 1기] 주력 언어(Java)의 특징, 그 중 내가 좋아하는 특징 (0) | 2024.04.17 |