리버스 프록시는 클라이언트의 요청과 서버의 응답을 중개한다.
주로 NGINX 또는 apache를 사용한다.
Nginx의 특징
1. HTTP 서버
클라이언트(유저)로부터 요청을 받았을 때 WAS를 거치지 않고 요청에 맞는 정적 파일을 응답해주는 HTTP server로서 활용할 수 있다.
HTML, CSS 같은 정적인 리소스에 대한 요청을 Nginx가 처리해준다.
React의 build 된 파일들도 정적인 리소스라고 볼 수 있고, 따라서 Nginx가 index.html 같은 메인 페이지를 랜더링 해줄 수 있다.
2. 리버스 프록시 서버, 로드밸런싱
Nginx는 클라이언트의 요청을 적절한 WAS로 분산하기 위해 로드 밸런싱을 수행하여 성능, 확장성 및 신뢰성을 향상시킬 수 있다.
3. 캐싱
Nginx를 리버스 프록시로 사용하면 미리 렌더링된 버전의 페이지를 캐시하여 페이지 로드 시간을 단축시킬 수 있다.
WAS의 응답에서 수신한 데이터를 캐싱하고, 이 데이터를 사용하여 매번 동일한 데이터를 프록시 서버에 연결할 필요 없이 Nginx가 스스로 클라이언트에 응답하는 방식으로 작동한다.
4. SSL Termination
Nginx는 클라이언트와의 연결에 대한 SSL endpoint 역할을 할 수 있다. SSL 요청을 처리 및 해독하고 WAS의 응답을 암호화한다.
SSL을 사용하기위해 certbot을 사용할 수 있다.
5. 압축
WAS가 압축된 응답을 보내지 않는 경우 클라이언트로 보내기 전에 응답을 압축하도록 Nginx를 구성할 수 있다.
6. DDoS 공격 완화
수신 요청과 단일 IP 주소당 연결 수를 일반 사용자에게 일반적인 값으로 제한할 수 있다.
또한 Nginx를 사용하면 클라이언트 위치와 "User-에이전트" 및 "Referer"와 같은 요청 헤더 값을 기준으로 액세스를 차단하거나 제한할 수 있다.
NGINX 리버스 프록시 설정 방법
upstream 블럭과 함께 사용할 수 있다.
http {
upstream apigateway {
server apigateway_service:8000;
}
server{
listen 80;
location /api {
proxy_pass http://apigateway;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
}
}
- proxy_http_version 1.1 : 리버스 프록시를 위한 HTTP 프로토콜 버전을 정의한다. 기본 값은 1.0이다. 웹 소켓 및 활성 연결을 유지하려면 버전 1.1을 사용해야 한다.
- proxy_cache_bypass $http_upgrade : 캐시에서 응답을 가져오지 않을 조건을 설정한다. (웹소켓 캐싱 제한)
- Upgrade $http_upgrade 및 Connection "upgrade" : 응용프로그램이 웹 소켓을 사용하는 경우 Upgrade와 Connection 헤더가 필요하다.
- Host $host : $host 변수에는 요청을 보낸 호스트 이름 또는 호스트 요청 헤더 필드의 호스트 이름 또는 요청과 일치하는 서버 이름이 포함된다.
- X-Real-IP $remote_addr : 실제 방문자 원격 IP 주소를 리버스 프록시 서버로 전달한다.
- X-Forwarded-$proxy_add_x_forwarded_for : 클라이언트가 프록시 처리한 모든 서버의 IP 주소를 포함하는 목록이다. X-Forwarded-For 헤더값은 조작이 가능하기 때문에 애플리케이션에서 Client IP 값으로 어떠한 작업이 필요할 경우 올바르게 동작하지 않을 수 있다.
- X-Forwarded-Proto $scheme : HTTPS 서버 블록 내에서 사용할 경우 프록시 서버의 각 HTTP 응답이 HTTPS로 다시 작성된다.
- X-Forwarded-Host $host : 클라이언트가 요청한 원래 호스트를 정의한다.
- X-Forwarded-Port $server_port : 클라이언트가 요청한 원래 포트를 정의한다.
'DevOps > Nginx' 카테고리의 다른 글
[Nginx] ip_hash method 주의사항 (backup X) (0) | 2021.11.20 |
---|---|
[Nginx] Nginx HTTPS 및 cerbot SSL 인증서 적용 (0) | 2021.11.14 |
[Nginx] 웹 서버 Nginx 에 대해서... (7) | 2021.10.24 |