리버스 프록시 (Reverse Proxy)란?
리버스 프록시는 클라이언트(사용자)와 서버(백엔드) 사이에서 요청을 중계하는 서버를 말하는데 사용자가 웹사이트에 접속하면, 리버스 프록시가 먼저 요청을 받고 내부 서버로 전달한 뒤, 응답을 받아 다시 사용자에게 전달하는 방식을 말함.
보통 Nginx, Apache, HAProxy 같은 소프트웨어가 리버스 프록시 역할을 수행함.
시나리오 1 ::
1. 사용자가 www.naver.com 를 요청한다고 가정함.
2. DNS 서버가 네이버 서버가 모여있는 데이타 센터로 보내 버림.
3. 데이타 센터에서 제일 먼저 맞이하는 서버가 리버스 프록시 서버임.
4. www.naver.com 의 웹서버 내부 IP가 192.168.1.100 인 경우 사용자의 요청을 이쪽으로 보내 버림
5. 이후 웹서버의 응답을 리버스 프록시 서버가 받아서 다시 사용자에게 돌려줌.
시나리오 2 ::
1. 개인 사무실에 고정 IP 를 하나 준비한다.
2. 공유기에 고정IP 를 물려서 인터넷을 연결한다.
3. Ubuntu 서버를 하나 세팅한다.
4. Ubuntu 서버의 IP 를 내부 IP 192.168.1.100 으로 세팅한다.
5. 외부에서 들어오는 모든 요청을 192.168.1.100 으로 갈 수 있도록 공유기에서 포트 포워딩 또는 DMZ 세팅을 완료한다.
6. Ubuntu 에서 Nginx 를 설치함.
7. Nginx 에서 Reverse Proxy 를 세팅한 후, 내부에 있는 개발서버, 메일서버, DB서버로 전달 가능하다.
리버스 프록시의 주요 기능
로드 밸런싱 (Load Balancing)
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
}
}
upstream backend_servers {
server 192.168.1.10;
server 192.168.1.20;
server 192.168.1.30;
}
캐싱 (Caching)
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
location / {
proxy_cache my_cache;
proxy_pass http://backend;
}
}
HTTPS 적용 (SSL Termination)
리버스 프록시가 SSL을 처리하고 내부 서버는 HTTP만 사용하도록 설정 가능
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
location / {
proxy_pass http://backend_servers;
}
}
보안 강화
리버스 프록시는 백엔드 서버를 외부에서 직접 접근하지 못하게 보호해.
location /admin {
allow 192.168.1.0/24;
deny all;
proxy_pass http://backend_servers;
}
이렇게 하면 192.168.1.0/24 대역의 내부 네트워크에서만 접근 가능하도록 설정할 수 있음.
리버스 프록시 : 클라이언트 → 리버스 프록시 → 서버
포워드 프록시 : 클라이언트 → 포워드 프록시 → 인터넷
Nginx 설치 및 시작
sudo apt update
sudo apt install -y nginx
기타 명령어
# Nginx 시작하기
sudo systemctl start nginx
# Nginx 상태 확인
sudo systemctl status nginx
# 부팅 시 Nginx 자동 실행
sudo systemctl enable nginx
# 변경사항 적용
sudo systemctl restart nginx
# Nginx 설정 변경 후 바로 적용시키지 않고 테스트하기
sudo nginx -t
방화벽 설정 (UFW 사용 시)
sudo ufw status
sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
sudo ufw disable
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 9000/tcp
sudo ufw allow from 123.456.789.100 to any port 80
sudo ufw allow from 123.456.789.100 to any port 443
sudo ufw default deny incoming
sudo ufw allow from 123.456.789.100
Nginx 리버스 프록시 설정
sudo nano /etc/nginx/sites-available/reverse_proxy
내용 추가
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://192.168.1.20; # 내부 웹 서버 1
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://192.168.1.30; # 내부 웹 서버 2
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
설정 활성화
sudo ln -s /etc/nginx/sites-available/reverse_proxy /etc/nginx/sites-enabled/
설정 확인 및 적용하기
sudo nginx -t # 문법 오류 확인
sudo systemctl restart nginx
도메인 설정 (선택 사항)
example.com과 api.example.com이 203.0.113.100을 가리키도록 DNS 설정.
SSL 인증서 추가 (Let’s Encrypt)
Certbot 설치
sudo apt install certbot python3-certbot-nginx -y
SSL 인증서 발급
sudo certbot --nginx -d example.com -d api.example.com
자동 갱신 설정
sudo certbot renew --dry-run
/etc/nginx 폴더 내용
sites-available 폴더
/etc/nginx/sites-available/
├── default
├── example.com
└── mywebsite
Nginx에서 사용할 수 있는 모든 사이트의 설정 파일을 보관하는 곳.
하지만 sites-available에 설정 파일이 있다고 해서 자동으로 적용되지는 않음!
사이트를 활성화하려면 sites-enabled 폴더로 심볼릭 링크를 만들어야 함
sites-enabled 폴더
/etc/nginx/sites-enabled/
├── default (→ /etc/nginx/sites-available/default)
├── example.com (→ /etc/nginx/sites-available/example.com)
sites-available 폴더에 있는 설정 파일 중에서 활성화된 사이트들만 링크됨
이 폴더에 있는 설정 파일만 Nginx가 실제로 로드함
심볼릭 링크를 사용해서 관리함 (ln -s 명령어 사용)
새로운 사이트 추가 & 활성화 과정
sites-available에 새로운 설정 파일 추가
sudo nano /etc/nginx/sites-available/mywebsite
server {
listen 80;
server_name mywebsite.com www.mywebsite.com;
root /var/www/mywebsite;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
이 파일은 mywebsite.com으로 들어오는 요청을 /var/www/mywebsite 디렉터리로 연결하는 설정
사이트 활성화 (sites-enabled에 심볼릭 링크 추가)
sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/
Nginx 설정 파일이 올바른지 확인
sudo nginx -t
Nginx 재시작
sudo systemctl restart nginx
사이트 비활성화 방법
sudo rm /etc/nginx/sites-enabled/mywebsite
기본 설정 (default 파일)
default는 Nginx를 처음 설치하면 자동으로 생성되는 기본 설정 파일임.
/etc/nginx/sites-available/default에 위치
보통 server_name _; 설정을 포함하며, 특정 도메인 없이 들어오는 요청을 처리
필요 없으면 sudo rm /etc/nginx/sites-enabled/default로 비활성화 가능.
'리눅스 Linux' 카테고리의 다른 글
ssh 접속 포트 변경하기 22 (0) | 2025.02.07 |
---|---|
리눅스 버전 확인 - linux OS (0) | 2025.01.01 |
[리눅스] 폴더, 파일명 앞에 마침표가 있는 이유? (0) | 2022.09.03 |
VI 에디터 다루기 (0) | 2022.08.31 |
[리눅스] 명령어 정리 chmod : 권한변경 (0) | 2022.08.17 |