1) 프록시 서버란 무엇인가?
프록시 서버는 사용자와 서버와의 중계인 역할을 해준다
프록시는 크게 Forward Proxy와 Reverse Proxy로 구분된다.
1) Forward Proxy 서버
Forward Proxy는 인터넷에 연결하기 전에 프록시 서버에 먼저 요청을 하고 프록시 서버가 실제 서버로 요청을 한 후 클라이언트에게 결과를 전달해주는 것이며 쉽게 생각하면 프록시 서버가 클라이언트 대신 서버로 요청을 한다고 생각하면 된다.
고객 > 프록시 서버 > 인터넷 > 서버의 순서로 요청이 진행된다고 보면 된다.
1-1) Forward Proxy의 장점
1. 클라이언트 입장에서 프록시 서버가 대신 요청해주기 때문에 자신의 IP를 숨길 수 있다.
2. 자주 사용하는 데이터를 캐싱해서 네트워크 성능 향상이 가능하다.
2) Reverse Proxy 서버
Reverse Proxy는 클라이언트가 내부 서버에 접근 시 Proxy 서버를 먼저 거치고 난 후에 내부 서버로 요청을 보내는 방식이다.
고객 > 인터넷 > 프록시 서버 > 서버의 순서로 요청이 진행된다고 보면 된다.
2-1) Reverse Proxy의 장점
1. 실제 내부망에 있는 서버의 IP를 숨길 수 있다.
2. 하나의 IP와 서버를 가지고 서브도메인을 이용하여 여러 개의 웹 서비스를 운영이 가능하다.
3. 로드밸런싱을 통해 요청을 분배할 수 있다.
2) 도커를 이용한 Nginx Reverse Proxy 서버 구축
아래와 같은 순서로 요청이 전달될 수 있도록 프록시 서버를 구축하고자 한다.
- 고객의 요청: 사용자가 웹 브라우저를 통해 웹사이트에 요청을 보냅니다. 이 요청은 일반적으로 HTTP 프로토콜을 사용합니다.
- 프록시 서버 (Nginx): 요청이 Nginx 서버로 전달됩니다. 이 Nginx 서버는 설정된 리버스 프록시 역할을 하며, 클라이언트의 요청을 처리합니다.
- 프록시 서버에서 WordPress 서버로 요청 전달: Nginx는 요청을 proxy_pass 지시어에 따라 지정된 WordPress 서버 (http://wordpress:80 또는 http://wp:80)로 전달합니다. 이때 Nginx는 요청의 여러 헤더 정보를 포함하여 실제 요청을 전달합니다.
- 서버 (WordPress): WordPress 서버는 요청을 처리하고 필요한 정보를 데이터베이스에서 조회하여 결과를 생성합니다.
- 응답 전달:
- WordPress 서버는 생성한 응답을 Nginx 프록시 서버로 다시 보냅니다.
- Nginx는 이 응답을 받아서 클라이언트에게 전달합니다.
- 고객의 응답 수신: 최종적으로 사용자는 웹 브라우저를 통해 요청한 정보를 확인하게 됩니다.
1) 도커 네트워크 생성
아래 명령어를 통해 도커 네트워크를 생성한다.
docker network create {네트워크명}
2) mysql 컨테이너 생성
아래 명령어를 통해서 mysql 컨테이너를 생성한다.
docker run -d \
--name mysqld \
--network {생성한 네트워크명} \
-v $(pwd)/mysql:/var/lib/mysql \
-v $(pwd)/container_logs/mysql:/var/log/ \
-e MYSQL_ROOT_PASSWORD={ROOT_PASSWORD} \
-e MYSQL_DATABASE={DATABASE_NAME} \
-e MYSQL_USER={USERNAME} \
-e MYSQL_PASSWORD={USER_PASSWORD} \
--restart always \
mysql:5.7
3) 워드프레스 컨테이너 생성
아래 명령어를 통해서 워드프레스 컨테이너를 생성한다.
docker run -d \
--name wp \
--network {생성한 네트워크명} \
-v $(pwd)/container_logs/wordpress:/var/log/apache2/ \
-e WORDPRESS_DB_HOST=mysqld \
-e WORDPRESS_DB_USER={DB_USERNAME} \
-e WORDPRESS_DB_PASSWORD={DB_PASSWORD} \
-e WORDPRESS_DB_NAME={DB_NAME} \
--restart always \
rudclthe/project1:wpv1
4) vi ./nginx/nginx.conf 작성
vi 편집기로 nginx.conf 파일을 아래와같이 작성해준다.
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://wp:80;
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;
}
}
}
5) nginx 컨테이너 생성
아래 명령어를 통해서 nginx 컨테이너 생성
docker run -d \
--name nginxproxy \
--network {생성한 네트워크명} \
-p 80:80 \
-v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v $(pwd)/container_logs/nginxproxy:/var/log/nginx \
--restart always \
nginx:alpine
6) 퍼블릭ip:포트 접속
퍼블릭ip:설정 포트로 접속을 시도한다.
이번 실습에서 포트를 80번으로 설정해주었기 때문에 퍼블릭ip:80 접속 시도 시 워드프레스 초기 화면 확인이 가능하다.
'도커&쿠버네티스' 카테고리의 다른 글
쿠버네티스 개념 및 용어 정리 (0) | 2024.11.21 |
---|---|
로키 리눅스 기반 도커 컴포즈 파일 작성 및 실행하기 (0) | 2024.10.28 |
로키 리눅스 기반 도커 이미지 만들기 (0) | 2024.10.14 |
로키 리눅스 기반 볼륨 마운트 개념 및 실습 (0) | 2024.10.13 |
로키 리눅스 기반 도커 컨터이너와 호스트 간 파일 복사하기 (0) | 2024.10.12 |