Notice
Recent Posts
Recent Comments
Link
SeouliteLab
Nginx에서 X-Real-IP 설정하기: 예제 및 설명 본문
Nginx 웹 서버에서 X-Real-IP 헤더를 설정하는 방법에 대해 알아보겠습니다. X-Real-IP 헤더는 클라이언트의 실제 IP 주소를 전달하는 데 사용됩니다. 이것은 리버스 프록시 뒤에서 클라이언트의 IP 주소를 식별하는 데 유용합니다.
X-Real-IP 헤더는 웹 서버에서 클라이언트의 실제 IP 주소를 식별하는 데 사용됩니다. 이 헤더는 주로 리버스 프록시나 로드 밸런서와 같은 중개 서버를 통해 클라이언트 요청을 전달할 때 사용됩니다. 이 헤더의 주요 특징은 다음과 같습니다:
- 클라이언트 실제 IP 주소 제공: X-Real-IP 헤더를 사용하면 리버스 프록시나 로드 밸런서를 거쳐 서버에 도달하는 클라이언트의 실제 IP 주소를 식별할 수 있습니다. 이는 서버 측에서 클라이언트의 위치나 사용자 활동을 추적하는 데 유용합니다.
- 보안 강화: X-Real-IP 헤더를 사용하면 서버는 클라이언트의 실제 IP 주소를 식별할 수 있으므로 보안 검사나 접근 제어 등의 보안 정책을 더 효과적으로 적용할 수 있습니다.
- 로깅: 서버 로그에는 기본적으로 클라이언트와 중개 서버(예: 프록시) 사이의 IP 주소가 포함되어 있습니다. 그러나 X-Real-IP 헤더를 사용하면 실제 클라이언트 IP 주소를 로그에 포함시킬 수 있습니다. 이는 웹 사이트의 접근 로그를 분석하거나 모니터링할 때 유용합니다.
- 프라이버시: 일부 사용자는 중개 서버를 거치지 않고 직접 서버에 연결되는 것보다 중개 서버를 통해 연결하는 것을 선호합니다. 이는 사용자의 프라이버시를 보호하는 데 도움이 됩니다. 중개 서버를 통해 연결되면 실제 IP 주소가 숨겨지고 중개 서버의 IP 주소가 서버에 표시될 수 있습니다.
- 환경 구성: 서버 환경에서 클라이언트의 실제 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 헤더가 적용되었는지 확인합니다.
'프로그래밍' 카테고리의 다른 글
[Java/자바] Stream.toArray()를 사용하여 Stream을 List로 변환하는 방법 (0) | 2024.03.13 |
---|---|
[Java/자바] Stream.generate()와 Supplier: 다양한 활용 (0) | 2024.03.13 |
[Java/자바] Supplier 예제 (0) | 2024.03.13 |
[Java/자바] 다수의 Predicate를 or()로 연결하여 수행하기 (0) | 2024.03.13 |
[Java/자바] 다수의 Predicate를 and()로 연결하여 수행하기 (0) | 2024.03.13 |