제가 ESXi로 홈서버를 구축하면서 Proxy 서버를 구축하는 이유는 여러가지가 있지만 가장 큰 이유는 바로 관리의 용이성 입니다.
저같은 경우 dalso.org라는 도메인을 사용중인데 Proxy서버는 이 도메인의 서브도메인, blog,drive,기타 등등 여러가지 사용할 수 있도록 도와줍니다.
Proxy 서버란?
프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 가리켜 ‘프록시’, 그 중계 기능을 하는 것을 프록시 서버라고 부른다 – wiki백과
뭐 간단하게 중계서버라고 보시면 됩니다. 중간에 길을 찾아주는(?)
DNS 개념과 유사하게 보시면 됩니다.
※ 저는 Nginx를 이용한 Reverse Proxy를 사용하고있습니다만 간단하게 프록시 서버라고 하겠습니다
프록시 서버 미사용시 흐름도
클라이언트(모바일,PC) -> 인터넷 -> 공유기 -> 포트별 포트포워딩으로 각서버 및 도메인 접근
ex) dalso.org:80은 블로그 dalso.org:8080은 파일서버 등등
프록시 서버 사용시 흐름도
간단하게 앞 Proxy 서버에서 갈길을 잡아주기때문에 여러 서버 및 도메인을 운영하기 적합합니다.
클라이언트(모바일,PC) -> 인터넷 -> 공유기 -> Proxy서버 -> 각 서버 및 도메인
ex) blog.dalso.org 는 블로그 drive.dalso.org 는 파일서버 등등
구축환경
OS : Ubuntu 20.04.01 LTS
Nginx
설정에 SSL 포함되어있음
Nginx를 이용한 Reverse Proxy
그래서 제가 구축한게 Nginx를 이용한 Reverse Proxy 서버입니다.
물론 Apache를 이용해서도 구현할 수 있겠지만.. 아무래도 Nginx가 더 제손에 익숙하다보니 선택하게 되었습니다.
구축은 매우 쉽습니다. 최신버전보다는 Stable로 안정성을 추구하기때문에 기본버전으로 설치할텐데 설치 후에 설정이 중요하니 차근차근 따라오시면 됩니다.
Nginx 설치하기
설치전에 apt update && apt upgrade -y
로 패키지 상태를 최신버전으로 유지해줍니다.
설치할 버전은 apt list nginx
로 확인할 수 있습니다.
(-a 해봤자 구버전 나옵니다 ㅎ)
설치는 apt install nginx
로 진행해주세요.
Nginx 설치 확인하기
설치는 금방 끝나기 때문에 바로 확인해줍시다.nginx -v && service nginx status
위 화면처럼 나오면 정상입니다.
그리고 서버의 ip로 웹브라우저를 통해 접근하면 아래처럼
웰컴투엔진엑스를 보실수있습니다.
Reverse Proxy 설정하기
이제 본격적인 Reverse Proxy 설정입니다.
예시는 도메인과 서버들을 통해 설명 드리겠습니다.
Proxy서버 IP – 192.168.1.10
도메인1 – blog.dalso.org = 서버1 192.168.1.11
도메인2 – file.dalso.org = 서버2 192.168.1.12
기본적인 구성은 공유기에서 80,443 포트포워딩을 Proxy 서버(192.168.1.10)가 받는것 입니다.
이 Proxy 서버가 웹서비스(80,443)에 대한 Request를 받게되면 Proxy서버에서 요청온 Domain의 목적지에 따라 하위서버로 전달해줍니다.
사용자가 blog.dalso.org 로 접근요청시 설정
사용자 -> 인터넷 -> 공유기 -> Proxy서버(192.168.1.10) -> 서버1(192.168.1.11)
vi /etc/nginx/sites-available/blog.dalso.org
upstream backendweb {
server 192.168.1.11:80;
keepalive 1024;
}
server {
listen 80 ;
listen [::]:80 ;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name blog.dalso.org;
location / {
return 301 https://blog.dalso.org$request_uri; ###### HTTPS www로 리다이렉팅
}
}
server {
listen 443 ;
listen [::]:443 ;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name blog.dalso.org;
ssl on;
ssl_certificate /etc/letsencrypt/live/[도메인]/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/e/[도메인]/privkey.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
#ssl_session_cache shared:SSL:1m;
ssl_session_timeout 1440m;
ssl_buffer_size 8k;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CB
C3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';
ssl_prefer_server_ciphers on;
ssl_trusted_certificate /etc/letsencrypt/live/[도메인]/chain.pem;
ssl_stapling on;
ssl_stapling_verify on;
access_log /var/log/nginx/wiki.web.access.log;
error_log /var/log/nginx/wiki.web.error.log;
location / {
proxy_pass http://backendweb/;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 1d;
proxy_set_header Host $http_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;
}
}
그리고 ln -s /etc/nginx/sites-available/blog.dalso.org /etc/nginx/sites-enable/blog.dalso.org
로 심볼릭 링크 생성을 진행해줍니다.
마지막으로 service nginx restart
위와같은 버전으로 여러 도메인을 지정해주면 아래 서버 및 도메인이 몇개던지 Reverse Proxy를 이용해서 연계가 가능합니다.