Nginx에서 역방향 프록시를 만드는 방법

NGINX는 리버스 프록시 서버로 널리 사용되는 다목적 고성능 웹 서버입니다. 역방향 프록시는 클라이언트 요청을 중개하여 하나 이상의 백엔드 서버에 배포합니다. 이 설정은 로드 밸런싱, 보안 향상, 고가용성 제공에 이점을 제공합니다. NGINX를 역방향 프록시로 사용하면 웹 서비스의 확장성과 안정성을 향상시킬 수 있습니다.

이 가이드에서는 NGINX에서 역방향 프록시를 생성하는 방법을 보여주고 클라이언트 요청을 백엔드 서버로 효율적으로 라우팅하는 데 필요한 구성 단계를 다룹니다.

Nginx에서 역방향 프록시 생성 및 구성

Nginx에서 기본 역방향 프록시 설정

먼저 Nginx를 역방향 프록시로 구성하려면 Nginx 구성 파일에 액세스하세요. 일반적으로 이 파일은 /etc/nginx/nginx.conf에 있습니다. sudo Nano를 사용하는 등 원하는 텍스트 편집기로 엽니다.

sudo nano /etc/nginx/nginx.conf

구성 파일 내에서 http 블록에 중점을 둡니다. 여기에 역방향 프록시 설정의 초석인 서버 블록을 삽입합니다. 서버 블록은 지정된 포트(일반적으로 포트 80)에서 HTTP 트래픽을 수신합니다. 이 블록 내에서 위치/지시문은 Nginx에게 들어오는 요청을 처리하는 방법을 알려줍니다. 이러한 요청을 IP 주소 또는 호스트 이름으로 지정된 백엔드 서버로 리디렉션하려면 Proxy_pass 지시어를 사용하세요.

예를 들어 구성은 다음과 같습니다.

http {
    ...
    server {
        listen 80;
        location / {
            proxy_pass http://backendserver_address;
        }
    }
}

backendserver_address를 백엔드 서버의 실제 주소로 바꾸는 것을 잊지 마세요. 이 간단한 설정은 Nginx에게 들어오는 모든 HTTP 요청을 지정된 백엔드 서버로 전달하도록 지시합니다.

Nginx의 고급 역방향 프록시 구성

고급 설정에서는 역방향 프록시의 추가 측면을 구성할 수 있습니다. 여기에는 로드 밸런싱, SSL 종료 또는 캐싱에 대한 설정이 포함될 수 있습니다.

로드 밸런싱 구현

여러 백엔드 서버를 운영하는 경우 Nginx는 들어오는 트래픽을 서버 간에 분산하여 성능과 안정성을 향상시킬 수 있습니다. 로드 밸런싱의 경우 업스트림 블록에 정의된 서버 그룹을 가리키도록 Proxy_pass 지시문을 수정합니다. 예를 들어:

http {
    upstream backend_servers {
        server backend1.example.com;
        server backend2.example.com;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend_servers;
        }
    }
}

이 구성을 통해 Nginx는 backend1.example.com과 backend2.example.com 간의 로드 균형을 조정할 수 있습니다.

SSL 종료 구성

SSL 종료의 경우 서버 블록이 포트 443에서 수신 대기하고 SSL 인증서와 키 파일 위치를 포함하는지 확인하십시오. 구성은 다음과 유사할 수 있습니다.

server {
    listen 443 ssl;
    ssl_certificate /path/to/certificate.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://backendserver_address;
    }
}

이 설정을 통해 Nginx는 SSL 연결을 처리하고 요청을 백엔드 서버에 전달하기 전에 해독할 수 있습니다.

변경 사항 마무리 중

Nginx를 구성한 후 다음을 사용하여 구문 오류에 대한 구성을 테스트하세요.

nginx -t

테스트가 통과되면 Nginx를 다시 로드하여 다음을 사용하여 변경 사항을 적용합니다.

sudo systemctl reload nginx

이 단계를 수행하면 현재 연결을 중단하지 않고 변경 사항이 적용됩니다.

추가 학습: Nginx 프록시 헤더 값 설정

Nginx를 역방향 프록시로 구성할 때 프록시 헤더 값을 올바르게 설정하는 것이 중요합니다. 이러한 헤더는 원래 클라이언트 요청 세부 정보를 백엔드 서버에 전달하는 데 중요합니다. 이 정보에는 클라이언트의 IP 주소, 요청의 원래 프로토콜 등이 포함될 수 있습니다. 이러한 헤더를 올바르게 설정하면 백엔드 서버가 요청에 적절하게 응답하는 데 필요한 컨텍스트를 갖게 됩니다.

프록시 헤더 이해

프록시 헤더는 클라이언트의 원래 요청에 대한 정보를 전달하므로 역방향 프록시 설정에 필수적입니다. 이 정보는 백엔드 서버가 들어오는 요청 처리에 대해 정보를 바탕으로 결정을 내리는 데 필요합니다. 예를 들어 클라이언트의 원래 IP 주소를 아는 것은 로깅, 분석 또는 보안 목적에 중요할 수 있습니다.

일반적인 프록시 헤더 구성

Nginx에서 구성할 수 있는 일반적인 프록시 헤더 중 일부는 다음과 같습니다.

  • X-Real-IP: 이 헤더는 원래 클라이언트의 IP 주소를 백엔드 서버에 전달하는 데 사용됩니다.
  • X-Forwarded-For: 비슷하다 X-Real-IP, 이 헤더에는 클라이언트의 IP를 포함하여 요청이 통과한 모든 서버 목록이 포함됩니다.
  • X-Forwarded-Proto: 이 헤더는 클라이언트의 원래 요청에 사용된 프로토콜(HTTP 또는 HTTPS)을 나타냅니다.

Nginx에서 프록시 헤더 설정 구현

Nginx 구성에서 이러한 헤더를 설정하려면 서버 블록 내의 위치 블록을 수정해야 합니다. 다음은 이러한 헤더를 설정하는 방법의 예입니다.

server {
    listen 80;
    location / {
        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_pass http://backendserver_address;
    }
}

이 구성에서 $remote_addr 및 $scheme은 Nginx가 각각 클라이언트의 IP 주소와 요청 체계(HTTP 또는 HTTPS)로 자동으로 채우는 변수입니다.

프록시 헤더 모범 사례

프록시 헤더를 구성할 때 전달되는 정보의 보안과 정확성을 고려하는 것이 중요합니다. 잠재적인 스푸핑을 방지하려면 Nginx 역방향 프록시에서 오는 헤더만 신뢰하도록 백엔드 서버가 구성되어 있는지 확인하세요.

결론

NGINX를 역방향 프록시로 성공적으로 구성하면 더 나은 성능, 보안 및 확장성을 위해 웹 인프라를 최적화할 수 있습니다. 최적의 로드 분산 및 응답 시간을 보장하기 위해 구성을 정기적으로 모니터링하고 조정하십시오. NGINX를 사용하여 역방향 프록시를 구현하면 클라이언트 요청을 관리하고 웹 서비스의 고가용성을 유지하기 위한 강력한 솔루션이 제공됩니다.

Joshua James

코멘트를 남겨주세요