SeouliteLab

Nginx에서 X-Real-IP 설정하기: 예제 및 설명 본문

프로그래밍

Nginx에서 X-Real-IP 설정하기: 예제 및 설명

Seoulite Lab 2024. 3. 13. 14:12

Nginx 웹 서버에서 X-Real-IP 헤더를 설정하는 방법에 대해 알아보겠습니다. X-Real-IP 헤더는 클라이언트의 실제 IP 주소를 전달하는 데 사용됩니다. 이것은 리버스 프록시 뒤에서 클라이언트의 IP 주소를 식별하는 데 유용합니다.

X-Real-IP 헤더는 웹 서버에서 클라이언트의 실제 IP 주소를 식별하는 데 사용됩니다. 이 헤더는 주로 리버스 프록시나 로드 밸런서와 같은 중개 서버를 통해 클라이언트 요청을 전달할 때 사용됩니다. 이 헤더의 주요 특징은 다음과 같습니다:

  1. 클라이언트 실제 IP 주소 제공: X-Real-IP 헤더를 사용하면 리버스 프록시나 로드 밸런서를 거쳐 서버에 도달하는 클라이언트의 실제 IP 주소를 식별할 수 있습니다. 이는 서버 측에서 클라이언트의 위치나 사용자 활동을 추적하는 데 유용합니다.
  2. 보안 강화: X-Real-IP 헤더를 사용하면 서버는 클라이언트의 실제 IP 주소를 식별할 수 있으므로 보안 검사나 접근 제어 등의 보안 정책을 더 효과적으로 적용할 수 있습니다.
  3. 로깅: 서버 로그에는 기본적으로 클라이언트와 중개 서버(예: 프록시) 사이의 IP 주소가 포함되어 있습니다. 그러나 X-Real-IP 헤더를 사용하면 실제 클라이언트 IP 주소를 로그에 포함시킬 수 있습니다. 이는 웹 사이트의 접근 로그를 분석하거나 모니터링할 때 유용합니다.
  4. 프라이버시: 일부 사용자는 중개 서버를 거치지 않고 직접 서버에 연결되는 것보다 중개 서버를 통해 연결하는 것을 선호합니다. 이는 사용자의 프라이버시를 보호하는 데 도움이 됩니다. 중개 서버를 통해 연결되면 실제 IP 주소가 숨겨지고 중개 서버의 IP 주소가 서버에 표시될 수 있습니다.
  5. 환경 구성: 서버 환경에서 클라이언트의 실제 IP 주소가 필요한 경우, 예를 들어 보안 정책에 따라 특정 IP 주소에 대한 액세스를 허용 또는 차단해야 하는 경우, X-Real-IP 헤더를 사용하여 이를 식별하고 처리할 수 있습니다.

이러한 특징들은 웹 애플리케이션의 보안, 분석 및 성능 최적화 등 다양한 측면에서 중요한 역할을 합니다.

 

예제 1: Nginx 설정 파일 열기

먼저, Nginx의 설정 파일을 엽니다.

sudo nano /etc/nginx/nginx.conf

예제 2: 설정 블록에 X-Real-IP 추가하기

Nginx 설정 블록 내에 X-Real-IP 헤더를 추가합니다.

http {
    ...
    set_real_ip_from  0.0.0.0/0;
    real_ip_header    X-Forwarded-For;
    ...
}

여기서 set_real_ip_from은 허용할 IP 주소 대역을 지정하고, real_ip_header는 실제 IP 주소를 포함하고 있는 헤더를 지정합니다.

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

    ##
    # Additional Settings
    ##

    # X-Real-IP Configuration
    set_real_ip_from  0.0.0.0/0;
    real_ip_header    X-Forwarded-For;

    # Logging Format
    log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_real_ip"';

}

 

예제 3: Nginx 설정 다시 불러오기

설정을 적용하기 위해 Nginx를 다시 불러옵니다.

sudo nginx -s reload

예제 4: 로그 파일에 실제 IP 주소 표시

Nginx 로그 파일에 실제 IP 주소를 표시하도록 설정합니다.

log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_real_ip"';

위 설정은 기본 로그 형식에 $http_x_real_ip를 추가하여 실제 IP 주소를 로깅합니다.

예제 5: 로그 파일 재시작

로그 설정을 다시 불러와서 변경 사항을 적용합니다.

sudo service nginx restart

예제 6: 설정 확인

마지막으로, 변경 사항이 적용되었는지 확인합니다.

curl -I http://yourdomain.com

위 명령은 헤더 정보를 확인하여 X-Real-IP 헤더가 적용되었는지 확인합니다.