Nginx Reverse Proxy 설정 방법 – 완벽정리

웹 개발이나 서버 관리를 하면서 정말 유용하게 사용할 수 있는 nginx의 reverse proxy 설정 방법에 대해 자세하게 알아보겠습니다. Nginx를 처음 접하시는 분들도 쉽게 따라할 수 있도록 최대한 간단하고 명확하게 설명해드리도록 하겠습니다. 실무에서 Nginx를 사용하고 계신다면 본문 내용을 자세하게 읽어보시면 도움을 얻을수 있을것입니다.

 

Nginx 역방향 프록시(Reverse Proxy)란?

 

Nginx 웹서버는 오픈소스 웹 서버 및 HTTP 서버로 널리 사용되고 있는 소프트웨어입니다. 그중에서도 reverse proxy(역방향 프록시) 설정은 Nginx의 가장 대표적인 기능 중 하나 입니다. Reverse Proxy란? 외부 네트워크에서 내부 서버나 서비스에 접근할 때 중간에서 트래픽을 전달하고 중개하는 역할을 하는 서버를 말합니다. 즉, 클라이언트의 요청을 받아 내부 서버로 전달하고, 내부 서버의 응답을 클라이언트에게 반환하는 역할을 해주는 기능이 핵심인데요. Reverse Proxy 사용시 어떤 장점을 얻을수 있을까요?

  • 보안 강화: Reverse Proxy를 사용하면 외부에서 내부 서버에 직접 접근하는 것을 차단할 수 있으므로 보안성이 향상됩니다.
  • 부하 분산: 여러 대의 내부 서버를 사용하는 경우, Reverse Proxy를 이용하여 클라이언트의 요청을 각 서버에 분산시킴으로써 서버 부하를 줄일 수 있습니다.
  • 로드 밸런싱: Reverse Proxy는 로드 밸런서로도 동작할 수 있습니다. 여러 대의 서버 중 부하가 적은 서버에 클라이언트 요청을 할당함으로써 시스템 전체의 성능을 향상 시킬 수 있습니다.
  • SSL/TLS 처리: SSL/TLS 인증서를 발급받아 적용함으로써 HTTPS 연결을 지원하며, 암호화된 트래픽을 복호화하여 내부 서버에 전달하므로 보안성이 강화됩니다.
  • 캐시 기능: 자주 요청되는 데이터를 Reverse Proxy 서버에 캐시하여 응답 속도를 향상시킬 수 있습니다.

 

Nginx에서의 reverse proxy 설정은 비교적 간단하며, 다양한 옵션을 제공합니다. 이를 통해 대규모 웹 서비스를 운영하는 데 필요한 기능을 구현할 수 있습니다.

 

Nginx 설치 및 기본 구성 방법

 

Nginx를 사용하기 위해서는 먼저 컴퓨터에 설치해야 합니다. Nginx는 공식 웹사이트(https://*.*/) 에서 다운로드 할 수 있으며, 대부분의 운영체제(Windows, Linux, macOS 등)를 지원합니다.

 

  • 웹 서버 포트 설정: Nginx 가 클라이언트의 요청을 수신할 포트 번호를 지정합니다. 일반적으로 80번 포트를 사용하지만, 다른 포트를 사용할 수도 있습니다.
  • 서버 root 디렉토리 설정: 웹 서버가 파일을 제공할 root 디렉토리를 지정합니다. 이 디렉토리는 웹 페이지, 이미지, CSS, JavaScript 등의 파일이 저장되는 곳입니다.
  • HTTP 모듈 설정: Nginx 는 다양한 HTTP 모듈을 제공합니다. 필요한 모듈을 추가하거나 제거하여 웹 서버의 기능을 확장할 수 있습니다.
  • 로그 파일 경로 설정: Nginx 의 로그 파일이 저장될 경로를 지정합니다. 로그 파일은 웹 서버의 동작 기록을 저장하며, 문제 해결에 유용한 정보를 제공합니다.
  • 인증 및 권한 설정: 인증 방식(Basic Authentication, Digest Authentication 등) 과 권한 설정(읽기, 쓰기, 실행 등) 을 통해 웹 서버 접근을 제어할 수 있습니다.
  • 비동기 처리 설정: 비동기 처리 모듈을 사용하여 동시에 여러 개의 요청을 처리할 수 있습니다. 이를 통해 웹 서버의 성능을 향상 시킬 수 있습니다.

 

위에서 설명드린 바와 같이 간단한 설정만으로도 Nginx 를 웹 서버로 사용할 수 있지만, 실제 서비스를 운영하기 위해서는 추가적인 설정이 필요할 수 있습니다.

 

Reverse Proxy 구성 예시

 

Nginx에서 역방향 프록시를 구성하려면 nginx.conf 파일에 서버 블록을 추가해야 합니다. 일반적으로 server라는 키워드를 사용하여 시작되며, listen 옵션을 통해 수신할 포트 번호를 지정합니다.

예시 설정

server {
listen 80;
server_name *.*.*;

location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

 

위 예제에서는 80번 포트에서 수신하고 *.*.* 이라는 호스트 이름에 대한 요청을 내부 서버(localhost:8080)로 전달하는것을 의미합니다. 필요에 따라 `proxy_redirect`, `proxy_http_version`, `proxy_buffer_size` 등의 기타 매개변수를 조정할 수도 있습니다. 이렇게 설정하면 Nginx는 들어오는 모든 HTTP 요청을 내부 서버로 전달하고, 그 응답을 클라이언트에게 반환하는 설정입니다.

 

보안 강화를 위한 SSL/TLS 설정 방법

 

SSL (Secure Sockets Layer) 또는 TLS (Transport Layer Security)를 사용하면 네트워크 상에서 전송되는 데이터를 암호화하여 보안을 강화할 수 있습니다. Nginx에서도 SSL/TLS를 지원하며, 다음과 같은 방법으로 설정할 수 있습니다.

첫번째 단계로는 인증서 발급을 진행해야합니다. SSL/TLS를 사용하려면 인증서가 필요합니다. 인증서는 신뢰할 수 있는 인증 기관(CA)에서 발급받을 수 있습니다. 대표적인 인증 기관으로는 Symantec, Comodo, GlobalSign 등이 있습니다. 인증서를 발급받은 후에는 .crt 파일과 .key 파일을 다운로드 받습니다.

 

두번째 단계로는 Nginx 환경 설정을 통해 nginx.conf 파일에 ssl 모듈을 추가하고, 인증서 파일과 키 파일을 지정해줘야 합니다.

예시)

ssl on;
ssl_certificate /etc/nginx/certs/example.crt;
ssl_certificate_key /etc/nginx/certs/example.key;

위 예제 설정에서는 /etc/nginx/certs 경로에 있는 example.crt와 example.key 파일을 사용한다는 것입니다. 또한, 443 포트 사용: SSL/TLS 연결을 위해서는 443 포트를 사용해야 합니다. 이전에 언급한 ‘listen’ 지시자에서 포트 번호를 443으로 변경해주면 됩니다. 이렇게 설정하면 Nginx는 HTTPS 프로토콜을 사용하여 클라이언트와 통신하며, 전송되는 데이터는 암호화되어 보안성을 강화 할 수 있습니다.

 

로드 밸런싱 설정으로 트래픽 분산

 

대용량 트래픽을 처리해야 하는 경우, 로드 밸런싱(Load Balancing)을 설정하여 서버 부하를 분산시킬 수 있습니다. Nginx에서는 라운드 로빈(Round Robin), 최소 연결(Least Connection), IP 해시(IP Hash) 등 다양한 로드 밸런싱 알고리즘을 지원합니다.

가장 기본적인 로드밸런싱 알고리즘 중에서 라운드 로빈 방식은 각 서버에 순차적으로 요청을 분배하는 방식이며, 최소 연결 방식은 현재 가장 적은 연결 수를 가진 서버에 요청을 분배하는 방식입니다. 마지막으로 IP 해시 방식은 클라이언트의 IP 주소를 기반으로 서버를 할당하는 방식입니다.

예를 들어, nginx.conf 파일에 다음과 같이 로드 밸런싱 설정을 추가해 주면 되는것입니다.


upstream backend {
server 192.168.0.1:80 weight=5 max_fails=3 fail_timeout=30s;
server 192.168.0.2:80 weight=3 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}

여기서 upstream 블록은 로드 밸런싱 대상 서버들을 정의하는것이고 server 블록은 실제 웹 서버를 설정합니다. 위 예시에서는 192.168.0.1과 192.168.0.2 두 대의 서버를 로드 밸런싱 대상으로 설정한 예시인데요. 이렇게 설정하면 들어오는 요청이 두 서버에 균등하게 분배되어 서버 부하를 분산시킬 수 있습니다.

 

Nginx Reverse Proxy 설정 방법에 대해서 알아보았습니다. 대용량 서비스를 운영중이거나 위와 같은 Reverse Proxy 기능이 필요할때 유용하게 사용하시면 원활한 웹서비스 운영을 하는데 도움이 될것입니다.

Leave a Comment