NGINX ngx_http_userid_module 모듈을 통한 요청 쿠키 활성화
이 글에서는 NGINX 의 ngx_http_userid_module 모듈을 활용하여 클라이언트 요청에 쿠키를 활성화하고 관리하는 방법을 다룹니다.
이 모듈은 사용자 고유의 ID 쿠키를 생성해 요청을 추적하거나 사용자 세션을 유지하는 데 유용하며, 클라이언트의 사용자 경험을 강화할 수 있습니다.
특히 NGINX 구성 파일 설정을 포함하여 쿠키 만료 시간과 경로 설정에 대한 자세한 예시도 제공합니다.
목차
1. 개요
1-1. 쿠키란 무엇인가?
1-2. NGINX에서의 쿠키 사용 이점
2. ngx_http_userid_module 모듈 이해하기
2-1. ngx_http_userid_module 모듈의 역할과 기능
2-2. ngx_http_userid_module 요청 쿠키 활성화 방법
3. NGINX에서 쿠키 설정 예시
3-1. ngx_http_userid_module 모듈을 통한 쿠키 구성
3-2. ngx_http_userid_module 모듈을 통한 쿠키 만료 시간 및 경로 설정
3-3. 특정 쿠키 NGINX Logging
3-4. 전체 NGINX 구성
4. 요약 및 결론
1. 개요
이 목차에서는 쿠키의 기본 개념과 함께 NGINX 에서 쿠키를 사용하는 이유와 이점에 대해 설명합니다.
쿠키는 사용자의 웹 세션을 관리하고, 사용자 정보를 지속적으로 활용하기 위해 브라우저에 저장되는 작은 데이터 파일입니다. NGINX에서는 이러한 쿠키를 통해 사용자 요청을 추적하고 세션을 유지할 수 있어, 특히 대규모 트래픽을 처리하거나 사용자 경험을 개선하려는 웹 애플리케이션에 유용합니다.
1-1. 쿠키란 무엇인가?
쿠키는 웹 서버가 사용자의 브라우저에 전송하여 저장되는 작은 데이터 조각으로, 사용자의 세션 상태를 기억하고 추적하는 데 사용됩니다.
이 정보는 클라이언트와 서버 간에 상태 정보를 공유하여, 로그인 유지, 사용자 선호 설정, 맞춤형 콘텐츠 제공과 같은 기능을 수행하는 데 필수적입니다.
1-2. NGINX에서의 쿠키 사용 이점
ngx_http_userid_module 모듈을 통해 클라이언트에게 고유한 쿠키 ID를 부여하여 사용자 세션을 관리하거나 트래픽을 분석할 수 있습니다.
또한, 쿠키는 사용자의 선호도에 따라 맞춤형 응답을 제공하는 데 도움을 줍니다. 이를 통해 사용자 경험을 향상시키며, 대규모의 동시 접속자를 효율적으로 관리할 수 있습니다.
2. ngx_http_userid_module 모듈 이해하기
2-1. ngx_http_userid_module 모듈의 역할과 기능
ngx_http_userid_module은 NGINX가 클라이언트에게 고유한 ID 쿠키를 생성하고 부여하도록 해주는 모듈입니다. 이 모듈을 통해 할당된 사용자 ID는 이후 요청에서도 지속되며, 이를 통해 사용자 세션을 식별하고 사용자별 데이터를 추적할 수 있습니다.
2-2. ngx_http_userid_module 쿠키 활성화 방법
ngx_http_userid_module 모듈을 통해 요청 쿠키를 활성화하려면 NGINX 설정 파일에 모듈 지시어를 추가해야 합니다. 예를 들어, userid on 지시어로 모듈을 활성화하고 userid_name 지시어로 쿠키 이름을 설정할 수 있습니다. 이를 통해 클라이언트 요청에 고유한 쿠키를 부여하게 됩니다. 또한, userid_expires와 같은 지시어로 쿠키의 만료 시간을 설정하여 세션 유지 시간을 관리할 수 있습니다.
3. NGINX 쿠키 설정 예시
3-1. ngx_http_userid_module 모듈을 통한 쿠키 구성
ngx_http_userid_module을 사용하려면 NGINX 구성 파일에서 모듈을 활성화해야 합니다. 아래와 같이 userid on;으로 모듈을 활성화하고, userid_name 지시어로 생성할 쿠키의 이름을 설정합니다. 또한 이 모듈은 Apache의 mod_uid 모듈과 호환됩니다.
# 쿠키 활성화 및 이름 설정
userid on; # 쿠키 기능 활성화
userid_name uid; # 쿠키 이름을 'uid'로 설정
userid_path /; # 쿠키의 유효 경로 설정
userid_domain example.com; # 쿠키의 유효 도메인 설정
이 구성은 example.com 도메인에서 / 경로에 대해 uid라는 이름의 쿠키를 설정합니다.
Syntax: userid on | v1 | log | off;
Default: userid off;
Context: http, server, location
쿠키 설정 및 수신된 쿠키의 로깅을 활성화 또는 비활성화합니다.
on: 버전 2 쿠키 설정 및 수신된 쿠키의 로깅 활성화v1: 버전 1 쿠키 설정 및 수신된 쿠키의 로깅 활성화log: 쿠키 설정은 비활성화, 수신된 쿠키의 로깅은 활성화off: 쿠키 설정 및 수신된 쿠키의 로깅 비활성화
Syntax: userid_name name;
Default: userid_name uid;
Context: http, server, location
쿠키 이름을 설정합니다.
Syntax: userid_path path;
Default: userid_path /;
Context: http, server, location
쿠키가 설정될 경로를 정의합니다.
Syntax: userid_domain name | none;
Default: userid_domain none;
Context: http, server, location
쿠키가 설정될 도메인을 정의합니다. none 매개변수는 도메인 설정을 비활성화합니다.
userid_domain 지시어는 쿠키의 Domain 속성을 지정할 때 사용되며, 이를 통해 쿠키가 적용되는 도메인을 설정할 수 있습니다. 예를 들어, userid_domain example.com;으로 설정하면 쿠키는 example.com과 그 하위 도메인에서만 유효합니다.
userid_domain none;으로 설정하면 NGINX는 쿠키의 Domain 속성을 설정하지 않으며, 기본적으로 현재 호스트에만 쿠키가 적용됩니다. 이는 일반적으로 현재 도메인에서만 쿠키를 유효하게 하려는 경우 사용됩니다.
Syntax: userid_expires time | max | off;
Default: userid_expires off;
Context: http, server, location
브라우저가 쿠키를 유지해야 하는 시간을 설정합니다. max 매개변수는 쿠키 만료 시간을 “2037년 12월 31일 23:55:55 GMT”로 설정하고, off는 브라우저 세션 종료 시 만료되도록 합니다.
3-2. ngx_http_userid_module 모듈을 통한 쿠키 만료 시간 및 경로 설정
쿠키 만료 시간을 제어하려면 userid_expires 및 add_header 지시문을 활용할 수 있습니다.
userid_expires 지시문은 쿠키의 만료 시간을 d (일) 또는 h (시간) 단위로 설정할 수 있습니다.
userid_expires 1d;
그러나 userid_expires 지시문은 쿠키 만료시간을 분 단위로 설정하는 옵션이 직접 제공되지는 않습니다.
분 단위 쿠키 만료시간을 설정할 수 있는add_header 지시문은 Max-Age 속성을 통해 분 단위 쿠키 만료시간 구현이 가능합니다. Max-Age=60로 설정하면 쿠키가 1분 동안 유효함을 의미합니다.
# 기본 웹 경로 및 인덱스 파일 설정
location / {
add_header Set-Cookie "uid=$cookie_uid; Path=/; Max-Age=60; HttpOnly";
root /usr/share/nginx/html;
index index.html index.htm;
}
3-3. 특정 쿠키 NGINX Logging
NGINX에서 쿠키 값을 참조할 때, $cookie_{쿠키이름} 형식을 사용하여 해당 쿠키의 값을 가져올 수 있습니다.
클라이언트의 특정 쿠키 값을 로그에 기록하려면 $http_cookie 변수 또는 $cookie_{쿠키이름} 변수를 사용하여 특정 쿠키만 로그에 남길 수 있습니다. 아래 예시에서는 uid라는 이름의 쿠키 값을 로그에 기록합니다.
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$cookie_uid"';
access_log /var/log/nginx/access/access.log main;
3-4. 전체 NGINX 구성
NGINX STORE GitHub: userid-cookie.conf
server {
listen 80 default_server;
server_name example.com;
# 쿠키 활성화 및 이름 설정
userid on; # 쿠키 기능 활성화
userid_name uid; # 쿠키 이름을 'uid'로 설정
userid_path /; # 쿠키의 유효 경로 설정
userid_domain example.com; # 쿠키의 유효 도메인 설정
# 로그 포맷 및 위치 설정
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$cookie_uid"';
access_log /var/log/nginx/access/nginx.access.log main;
# 기본 웹 경로 및 인덱스 파일 설정
location / {
add_header Set-Cookie "uid=$cookie_uid; Path=/; Max-Age=60; HttpOnly";
root /usr/share/nginx/html;
index index.html index.htm;
}
}
위 NGINX 구성에서 쿠키 설정을 위한 지시문들은 ngx_http_userid_module의 기능을 활성화하고, 클라이언트에 고유한 ID 쿠키를 부여하는 데 사용됩니다. userid on; 지시문을 통해 쿠키 기능이 활성화되며, userid_name uid;로 쿠키의 이름을 uid로 설정하여 클라이언트에게 부여할 쿠키를 정의합니다.
또한 userid_path /;와 userid_domain example.com;을 통해 쿠키의 유효 범위를 지정하여, 이 쿠키가 사이트 전체에서 작동하도록 하고, example.com 도메인 내에서만 유효하도록 설정합니다.
마지막으로 add_header Set-Cookie "uid=$cookie_uid; Path=/; Max-Age=60; HttpOnly";를 통해 쿠키의 유효 시간을 1분(60초)으로 지정하고 HttpOnly 속성을 추가하여 JavaScript에서 쿠키에 접근할 수 없도록 보안을 강화합니다.
4. 쿠키를 통한 NGINX UID 구현 구성
웹 브라우저에서 3-4. 전체 NGINX 구성 목차의 구성을 적용한 NGINX 서버로 접속 후, 개발자 도구를 통해 요청 Header를 확인해보면 Set-Cookie 헤더에 uid 라는 값의 클라이언트 쿠키가 NGINX를 통해 정해진 것을 확인할 수 있습니다.


또한 log_format 지시문 설정으로 NGINX의 로그에서도 이를 확인할 수 있습니다.

4. 요약 및 결론
이 글에서는 NGINX의 ngx_http_userid_module을 활용하여 클라이언트 요청에 쿠키를 활성화하고, 세션을 관리하는 방법에 대해 다루었습니다.
이 모듈을 통해 클라이언트에게 고유 ID를 부여하는 쿠키를 설정하여 사용자의 세션을 유지하고, 사이트의 사용자 경험을 향상시키는 것이 가능해집니다. 이를 통해 사용자별 맞춤형 서비스를 제공하는 환경에서 유용한 활용 방안을 마련할 수 있습니다.
NGINX의 다양한 모듈을 활용해 Web Server 혹은 Reverse Proxy, L7 Load Balancer의 고급 구성에 대해 알아보려면 NGINX STORE 블로그의 NGINX 카테고리를 참고하거나 NGINX STORE에 문의하여 사용 사례에 대해 상담 받아보세요.
댓글을 달려면 로그인해야 합니다.