MSA 트레이닝 센터

NGINX Reverse Proxy 구성하기

이 트레이닝 영상에서는 NGINX Reverse Proxy 는 NGINX 인스턴스에 대해 가장 널리 배포된 사용 사례 중 하나이며 클라이언트와 서버 간의 원활한 네트워크 트래픽 흐름을 보장하기 위해 추가 수준의 추상화 및 제어를 제공합니다.

  • Forward Proxy 및 Reverse Proxy에 대한 높은 수준의 이해
  • proxy_pass 지시문
  • 요청 헤더 재정의

NGINX Reverse Proxy 이해

NGINX Reverse Proxy 로 구성하면 개발자와 시스템 관리자에게 획기적인 변화가 될 수 있습니다. 이 강력한 도구는 서버의 성능과 보안을 향상시킬 뿐만 아니라 추가적인 제어 및 유연성 계층도 제공합니다. 이 트레이닝 코스에서는 NGINX를 Reverse Proxy 로 설정하는 복잡한 과정을 살펴보고 클라이언트와 서버 간의 원활한 네트워크 트래픽 흐름을 보장하기 위한 실용적인 통찰력과 전문가 팁을 제공합니다.
이 교육을 마치면 Reverse Proxy, `proxy_pass` 지시어, 요청 헤더를 재정의하는 방법을 포괄적으로 이해하게 될 것입니다. 애플리케이션 성능 최적화, 보안 강화, 단순히 새로운 기술 배우기 등 무엇을 원하시든 이 포스트는 귀하에게 꼭 맞게 제작되었습니다.

Reverse Proxy 란?

Reverse Proxy 는 클라이언트 장치와 백엔드 서버 사이에 위치하여 클라이언트 요청을 백엔드 서버에 전달하고 서버의 응답을 클라이언트에 반환하는 서버입니다. 외부 서버에 대한 클라이언트 요청의 중개자 역할을 하는 Forward Proxy와 달리 Reverse Proxy 는 네트워크 트래픽 관리를 위한 추가 수준의 추상화 및 제어를 제공합니다.

Reverse Proxy 사용의 이점

NGINX Reverse Proxy 를 사용하면 수많은 이점을 얻을 수 있습니다. 첫째, 백엔드 서버의 신원과 특성을 숨겨 보안을 강화합니다. 둘째, 클라이언트 요청을 여러 백엔드 서버에 분산시켜 로드 밸런싱과 중복성을 향상시킵니다. 마지막으로 사용자 경험을 향상시키기 위해 캐싱, 압축 및 기타 성능 최적화 기술을 제공합니다.

Reverse Proxy의 일반적인 사용 사례

NGINX Reverse Proxy 는 웹 가속(정적 콘텐츠 캐싱), 로드 밸런싱, SSL Termination, 애플리케이션 계층 보안을 비롯한 다양한 시나리오에서 일반적으로 사용됩니다. 또한 요청을 적절한 서비스로 라우팅하는 마이크로서비스 아키텍처와 CDN(콘텐츠 전송 네트워크)에 사용되어 캐시된 콘텐츠를 사용자에게 더 가까이 제공합니다.

NGINX를 Reverse Proxy로 설정

NGINX 설치

NGINX Reverse Proxy 로 구성하기 전에 서버에 NGINX를 설치해야 합니다. 이는 Ubuntu/Debian의 경우 apt, CentOS/RHEL의 경우 yum과 같은 패키지 관리자를 사용하여 수행할 수 있습니다. 예를 들어 Ubuntu에서는 다음 명령을 사용할 수 있습니다

				
					$ sudo apt update
$ sudo apt install nginx
				
			

기본 NGINX 구성

NGINX가 설치되면 기본 구성 파일은 `/etc/nginx/nginx.conf`에 있습니다. 기본 NGINX Reverse Proxy 를 설정하려면 구성 파일에 새 server{} 블록을 생성해야 합니다. 예는 다음과 같습니다.

				
					server {
    listen 80;
    server_name yourdomain.com;
    location / {
        proxy_pass http://backend_server;
        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;
    }
}
				
			
이 구성에서는 yourdomain.com에 대한 요청이 `proxy_pass`로 지정된 백엔드 서버로 전달됩니다.

`proxy_pass` 지시문

`proxy_pass` 개요

`proxy_pass` 지시문은 NGINX 리버스 프록시 구성의 핵심입니다. 클라이언트 요청을 전달해야 하는 백엔드 서버(또는 서버)를 지정합니다. 구문은 간단하며 HTTP, HTTPS 및 FastCGI와 같은 다양한 프로토콜을 지원합니다.

`proxy_pass` 구성

`proxy_pass`를 구성하려면 백엔드 서버의 주소를 지정해야 합니다. 이는 IP 주소, 도메인명 또는 UNIX 소켓일 수 있습니다. 예를 들어:

				
					location / {
    proxy_pass http://127.0.0.1:8080;
}
				
			

`proxy_pass`와 함께 변수 사용

NGINX를 사용하면 ‘proxy_pass’와 함께 변수를 사용하여 동적 구성을 만들 수 있습니다. 예를 들어 변수를 사용하여 특정 조건에 따라 요청을 라우팅하거나 여러 백엔드 서버 간의 로드 균형을 조정할 수 있습니다.

				
					location / {
    set $backend "http://backend1";
    proxy_pass $backend;
}
				
			

고급 구성 기술

NGINX를 사용한 로드 밸런싱

NGINX Reverse Proxy 사용의 주요 이점 중 하나는 로드 밸런싱입니다. NGINX는 라운드 로빈, 최소 연결, IP 해시 등 다양한 로드 밸런싱 알고리즘을 지원합니다. 다음은 라운드 로빈 로드 밸런싱의 예입니다.

				
					upstream backend_servers {
    server backend1;
    server backend2;
    server backend3;
}

server {
    listen 80;
    server_name yourdomain.com;
    location / {
        proxy_pass http://backend_servers;
    }
}
				
			

SSL Termination

SSL Termination에는 SSL 암호화 및 암호 해독을 NGINX Reverse Proxy로 Offload하여 백엔드 서버의 로드를 줄이는 작업이 포함됩니다. NGINX로 SSL Termination를 구성하려면 SSL 인증서와 키가 필요합니다. 예는 다음과 같습니다.

				
					server {
    listen 443 ssl;
    server_name yourdomain.com;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    location / {
        proxy_pass http://backend_server;
    }
}
				
			

NGINX를 사용한 캐싱

캐싱은 자주 요청되는 콘텐츠를 저장하여 성능을 크게 향상시킬 수 있습니다. NGINX는 프록시 캐시를 포함한 다양한 캐싱 메커니즘을 지원합니다. 기본적인 예는 다음과 같습니다.

				
					proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=1g;

server {
    listen 80;
    server_name yourdomain.com;
    location / {
        proxy_cache my_cache;
        proxy_pass http://backend_server;
    }
}
				
			

요청 헤더 재정의

요청 헤더 이해

요청 헤더는 클라이언트와 요청 자체에 대한 필수 정보를 제공합니다. NGINX Reverse Proxy를 구성할 때 백엔드 서버와의 적절한 통신을 보장하기 위해 이러한 헤더를 재정의하거나 조작해야 할 수도 있습니다.

공통 헤더 재정의

NGINX를 사용하면 `proxy_set_header` 지시어를 사용하여 요청 헤더를 설정하거나 수정할 수 있습니다. 재정의할 일반적인 헤더에는 `Host`, `X-Real-IP`, `X-Forwarded-For` 및 `X-Forwarded-Proto`가 포함됩니다. 예는 다음과 같습니다.

				
					location / {
    proxy_pass http://backend_server;
    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;
}
				
			

사용자 정의 헤더 조작

일반 헤더 외에도 요청에 사용자 지정 헤더를 추가할 수도 있습니다. 이는 백엔드 서버에 특정 정보를 전달하거나 디버깅 목적으로 유용할 수 있습니다. 예를 들어:

				
					location / {
    proxy_pass http://backend_server;
    proxy_set_header X-Custom-Header "CustomValue";
}
				
			

NGINX Reverse Proxy Troubleshooting

일반적인 문제 및 해결 방법

NGINX Reverse Proxy 를 설정하면 잘못된 라우팅, 잘못된 헤더 구성 또는 SSL 문제와 같은 문제가 발생할 수 있습니다. 이러한 문제를 신속하게 해결하려면 일반적인 문제 해결 기술을 숙지하는 것이 중요합니다.

NGINX 로그 사용

NGINX 로그는 문제 진단에 매우 중요합니다. 액세스 로그는 들어오는 모든 요청을 기록하고 오류 로그는 NGINX에서 발생한 모든 문제를 캡처합니다. 로깅이 활성화되어 있는지 확인하고 로그를 검토하여 문제를 식별하고 수정합니다.

디버깅 도구

HTTP 요청 테스트를 위한 ‘curl‘, 헤더 검사를 위한 브라우저 개발자 도구, SSL 인증서 확인을 위한 온라인 리소스 등 여러 도구가 NGINX Reverse Proxy 구성 디버깅을 지원할 수 있습니다.

결론

nginx reverse proxy

NGINX Reverse Proxy 로 구성하면 서버의 성능, 보안 및 유연성이 크게 향상될 수 있습니다. 핵심 개념을 이해하고 ‘proxy_pass’ 지시어를 숙지하고 고급 구성 기술을 구현함으로써 개발 및 시스템 관리 작업에서 NGINX의 모든 기능을 활용할 수 있습니다.
서버 인프라 최적화의 다음 단계를 밟을 준비가 되었다면 지금 NGINX를 리버스 프록시로 구성해 보는 것은 어떨까요? 이점은 명확하며 도구를 손쉽게 사용할 수 있습니다. 구성해 보세요!

 질문이 있거나 추가 지원이 필요한 경우 언제든지 지원팀에 문의하세요.