1. 역방향 프록시란 무엇인가?
* '프록시 서버'란 무엇인가?
일반적으로 프록시는 정방향 프록시를 의미한다.
프록시는 클라이언트와 서버와의 직접적인 통신을 하지 못하도록 중간에서 통신을 중계해 주는 중계자의 역할을 수행하는 서버이다.
프록시(Proxy) : 클라이언트와 서버 사이 중계자의 역할을 하는 서버!
* '프록시' 와 '라우터' 의 차이
프록시 와 라우터는 통신을 위한 데이터가 거쳐 가는 곳으로 쓰임새가 비슷해 보이기도 한다.
그러나 둘은 쓰임새의 결이 다르다.
프록시는 클라이언트와 서버 사이 통신을 중계하는 역할에 집중하였고,
라우터는 패킷을 효율적으로 목적지로 전달하기 위한 역할에 집중한 것이다.
* 정방향 / 역방향 프록시의 차이점
정방향 프록시는 일반적인 프록시의 형태로서, 클라이언트 앞에 위치하여, 해당 클라이언트가 서버와의 직접 통신을 하는 대신 정방향 프록시를 통해 통신하도록 한다.
정방향 프록시는 클라이언트 앞에서 위치하며, 원본 서버가 해당 특정 클라이언트와 직접 통신하지 못하도록 한다.
=> 보호 대상 : 클라이언트
역방향 프록시는 서버 앞에 위치하여, 해당 서버와의 통신을 위해선 자신(역방향 프록시)을 거쳐가도록 한다.
역방향 프록시는 원본 서버 앞에 위치하며, 어떤 클라이언트도 해당 원본 서버와 직접 통신하지 못하도록 한다.
=> 보호 대상 : 원본 서버
정방향 / 역방향 프록시의 차이점은 어떠한 개체를 '보호 대상'으로 하는가. 에 있다.
클라이언트를 보호하는 '정방향 프록시'는 클라이언트의 IP 주소 보호 등의 이점이 있고,
Forward Proxy : 클라이언트를 숨겨주고 서버와 통신 중계
서버를 보호하는 '역방향 프록시'는 외부 공격으로부터 서버를 보호하는 등의 이점이 있다.
Reverse Proxy : 서버를 숨겨주고 클라이언트와 통신 중계
프록시 예시 : Nginx , Apache
[참고 자료]
https://www.cloudflare.com/ko-kr/learning/cdn/glossary/reverse-proxy/
https://velog.io/@hklog/proxy-router
2. 역방향 프록시를 이용한 도메인 기반 서비스 (Nginx)
Nginx 역방향 프록시로 클라이언트의 접속을 'Apache 웹 서버' 와 'Nginx 웹 서버' 두가지로 중계할 것이다.
① http:// -> 80 Port 로 접속 후, 포트포워딩으로 80 : 8080 으로 'Nginx Reverse Proxy'(myproxy) 로 접속
② 'Nginx Reverse Proxy' 에서 192.x.x.x:8001 은 8001 Port 로, 192.x.x.x:8002 는 8002 Port로 요청
③ 'myapache' 컨테이너 (apache웹서버) 포트포워딩 8001:80 으로 접속
④ 'mynginx' 컨테이너 (nginx웹서버) 포트포워딩 8002:80 으로 접속
<실행전 세팅>
현재 실행중인 컨테이너 -> 없음
- 1. nginx 역방향 프록시 컨테이너 설치
# 이름 : myproxy
# 포드포워딩 : 8181:8181 , 80:8080 , 443:4443
# 바인딩 : /docker/appdata/nginx-proxy-manager:/config:rw
# 이미지 : jlesage/nginx-proxy-manager
docker run -d --name myproxy -p 8181:8181 -p 80:8080 -p 443:4443 -v /docker/appdata/nginx-proxy-manager:/config:rw jlesage/nginx-proxy-manager
- 실행중인 컨테이너 확인 => 'myproxy' 실행 중
- 2. Apache 웹 서버 와 Nginx 웹 서버를 구성하는 컨테이너 생성
- 구성파일을 저장할 디렉토리를 생성
mkdir apacheHome
mkdir nginxHome
# 이름 : myapache
# 포트포워딩 : 8001:80
# 바인딩 : ~/apacheHome:/usr/local/apache2/htdocs
# 이미지 : httpd (아파치)
docker run --name myapache -d -p 8001:80 -v ~/apacheHome:/usr/local/apache2/htdocs httpd
# 이름 : mynginx
# 포트포워딩 : 8002:80
# 바인딩 : ~/nginxHome:/usr/share/nginx/html
# 이미지 : nginx
docker run --name mynginx -d -p 8002:80 -v ~/nginxHome:/usr/share/nginx/html nginx
현재 실행중인 컨테이너
mynginx : Nginx 웹 서버 컨테이너
myapache : Apache 웹 서버 컨테이너
myproxy : 역방향 프록시 컨테이너 (Nginx 기반)
- 각 폴더에 해당 웹 서버임을 표시하는 간단한 html 파일 생성
- 3. 각 포트로 접속하여 확인
- 4. IP 주소에 자체 도메인 부여하기
'[IP 주소]:8001 , [IP 주소]:8002 에 자체 도메인을 부여해보자.'
1.
<메모장 - 관리자 권한으로 실행>
2.
C:\Windows\System32\Drivers\etc\hosts 파일 오픈
3.
'hosts'에 주소와 도메인 연결하기
# '[IP 주소] xxx.com' 추가
192.x.x.x aaa.com
192.x.x.x bbb.com
4.
http://192.x.x.x:8081 에 접속하여, 도메인 이름과 Forward Port를 설정 추가한다.
5.
설정한 도메인으로 접속이 가능해진다.
'Docker' 카테고리의 다른 글
[Docker] Front-end / Back-end 컨테이너 분할 후 오류 발생 해결 (Not Found 404) (0) | 2023.11.08 |
---|---|
[Docker] 도커 컨테이너를 이용하여 taskApp만들기 (mysql, php) (1) | 2023.11.03 |
[Docker] 도커 주요 명령어 (0) | 2023.10.25 |