반응형

nginx 만들기
- 컨테이너 간 통신하는 방법
- Reverse Proxy
- 서버로 들어오는 요청 가로채는 프로그램
- Web Server와 함께 사용할 것임
- 순서
- 클라이언트가 Reverse Proxy로 들어오게 되면
- Reverse Proxy가 Web Server로 안내
- 사용 이유(장점)
- 서버 정보를 숨길 수 있음
- https 인증서 설치가 쉬움
- 로드밸런싱 가능
- 로그 남기기
- IP차단
- 종류
- Nginx
- caddy
- Reverse Proxy
- Nginx 로컬 설치 및 셋팅
- NginX 실행 순서
- Nginx 설치
- 도커를 사용할 것이기에 우선 패스
- Nginx 설정 파일 작성
- Docker 폴더에 폴더와 파일 생성
- ex) nginx/myconfig1.conf
- 이후 nginx 문법에 맞게 설정 코드를 작성해야 함.
- 다만 따로 배운 적이 없기에 아래와 같이 우선 작성
- 간단히 설명하자면
- listen 80 ← 80 포트로 들어오면
- location ← 해당 코드를 실행해라는 의미
- 여기서 / 는 모든 경로 접속 시를 의미
- 그리모 http://localhost:8080 여기로 보내기
- 아래 코드는 웹서버에 도움되는 유저의 부가 정보 채워서 보내라는 의미
server { listen 80; location / { proxy_pass <http://localhost:8080>; 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; } }
- 리눅스의 경우엔
- /etc/nginx/conf.d 폴더에 해당 파일을 넣으면 된다고 함
- 그리고 기존 폴더에 default.conf 파일이 있는데
- 우선 순위가 기존 파일이 더 높기에
- 삭제 후 새롭게 작성한 파일을 넣으면 됨.
- 이후 nginx -g daemon off; 를 터미널에 입력하면 nginx 실행됨
- Docker 폴더에 폴더와 파일 생성
- Nginx 실행 명령어 입력
- Nginx 설치
- 코드 작성하기
- 생성한 nginx 폴더에 Dockerfile 만들기
- 이후 해당 파일에 아래와 코드 작성
- 코드 설명
- FROM docker에서 nginx 이미지 불러오기
- COPY로 우리가 만든 myconfig1.conf 를 특정 경로로 옮기기
- 기존 conf 파일을 지우기 위해 RUN 사용
- EXPOSE로 특정 포트 열기
- CMD로 실행 명령어 작성
- 코드 설명
- nginx
- Nginx 웹 서버 실행 명령어
- -g
- 글로벌 설정으로, 뒤에 오는 설정은 모든 Nginx 설정 파일에 영향을 미침
- daemon off;
- Nginx는 기본적으로 데몬 모드(백그라운드 실행)으로 동작
- Docker 컨테이너는 포그라운드에서 실행되는 프로세스를 필요로 하기에, daemon off; 를 설정하여 데몬 모드로 전환되지 않고, 포그라운드에서 실행되도록 함.
- 포그라운드 프로세스란?
- 현재 사용자의 터미널(콘솔)과 직접 연결된 상태에서 실행되는 프로세스를 의미
- 즉, 실행 결과가 즉시 화면에 출력됨.
- 프로세스가 종료될 때까지 터미널 제어권을 유지
- 예를 들어, 터미널에서 실행한 명령어가 작업을 마칠 때까지 기다리는 상태.
- 기존 데몬 모드(백그라운드 프로세스)란?
- 사용자의 터미널과 분리된 상태로 실행되는 프로세스
- 즉, 실행 결과는 화면에 출력X, 로그도 별도 저장
- 프로세스가 독립적으로 실행되며, 사용자는 터미널 다른 작업을 할 수 있음.
- 쉽게 이해하자면, 데몬 모드로 실행하면 컨테이너가 실행 중단된 것으로 간주되기에, 컨테이너가 바로 종료됨.
- 포그라운드 프로세스란?
- 이렇게 하면 Dcoker가 Nginx 프로세스를 주 프로세스로 인식하고, 컨테이너가 종료되지 않으며 정상적으로 동작.
- nginx
- 코드 설명
FROM nginx:1.27.2-alpine COPY ./myconfig1.conf /etc/nginx/conf.d/myconfig1.conf RUN rm /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
- 코드 설명
- 이후 해당 파일에 아래와 코드 작성
- 생성한 nginx 폴더에 Dockerfile 만들기
- 실행하기
- 터미널에서 이미지 만들기
- docker build -t nginx:1 ./nginx
- 생성한 nginx 이미지 실행
- option에서 Host port를 80 으로 변경 후 실행
- 이후 이전 생성한 nodeserver인 web server를 실행
- option에서 Host port를 myconfig1.conf에서 설정한 것처럼 8080으로 변경 후 실행
- 다만 nginx 서버에서 80 포트로 접속하면
- nodeserver 서버인 8080 포트로 안내가 되어야 하는데 안됨
- 이유?
- 현재 나의 컴퓨터(Host)에선 아래와 같이 2개의 가상 컴퓨터가 있음
- 가상 컴퓨터1(nginx, 80)
- localhost:80 → localhost:8080 안내하라고 되어 있음.
- 가상 컴퓨터2(nodeserver, 8080)
- 가상 컴퓨터1(nginx, 80)
- 다만
- 가상 컴퓨터1에는
- 8080 포트도 뚫려있지 않고
- 8080 포트에서 실행중인 서버도 없기에 동작을 안함
- 가상 컴퓨터2에 뚫려 있고, 실행중인 8080서버와는 완전히 구분된 별도의 컴퓨터
- 가상 컴퓨터1에는
- 현재 나의 컴퓨터(Host)에선 아래와 같이 2개의 가상 컴퓨터가 있음
- 해결 방법
- 가상 컴퓨터1(nginx, 80)
- localhost:80 → 가상 컴퓨터2의 localhost:8080 안내하라고 되어야 함.
- 안전하며, 간단한 방법
- network 내에 컨테이너를 넣으면 가상 IP 주소를 부여함
- 따라서 가상 컴퓨터1,2 를 함께 넣어서 관리
- 같은 네트워크 내에선
- 가상 IP주소가 생기기에 가상 컴퓨터끼리 통신이 가능.
- network 내에 컨테이너를 넣으면 가상 IP 주소를 부여함
- 가상 컴퓨터1(nginx, 80)
- 터미널에서 이미지 만들기
- NginX 실행 순서

'Docker&Container' 카테고리의 다른 글
Docker&Container - Network 2. 컨테이너간 통신 (1) | 2024.12.15 |
---|---|
Docker&Container - Docker hub, push, pull (0) | 2024.11.30 |
Docker&Container - 성능을 위한 Dockerfile 작성법 (1) | 2024.11.29 |
Docker&Container - 컨테이너 다루기 (0) | 2024.11.29 |
Docker&Container - Dockerfile로 도커 이미지 만들기 (0) | 2024.11.29 |