Nginx · 2 min read · Jan 22, 2026
항상 마이크로캐싱과 함께 Nginx를 사용해야 하는 이유
항상 마이크로캐싱과 함께 Nginx를 사용해야 하는 이유
모두가 웹 서버에서 가능한 한 많은 것을 끌어내는 것이 얼마나 어려운지 알고 있습니다. 호스팅 엔지니어로서의 일상적인 직무에서 저는 종종 같은 질문을 받습니다. “와우, 멋진 웹사이트인데, 대량 트래픽을 처리할 수 있을까요?”
“정상” 상황
Apache와 mod_php에서 실행되는 “정상” 웹사이트는 쉽게 초당 20개의 요청을 처리할 수 있어야 하지만, 초당 50개의 요청이 들어온다면 (정치당 웹사이트와 같은 일부 웹사이트에서는 이상하지 않음) 어떻게 될까요? 제 생각에는 Apache를 버리는 것이 정답입니다. 현재 상태로는 Apache가 더 이상 적합하지 않기 때문입니다.
네! Nginx!
Nginx가 등장합니다! 그래서 당신이 해야 할 일은 Nginx에서 웹사이트를 설정하고 빠른 부하 테스트를 실행하는 것입니다 (예를 들어 200명의 동시 사용자와 함께 1000개의 요청). 그러면 Apache보다 더 많은 요청을 처리하지 못하는 것을 알게 됩니다. 하지만 어떻게 그럴 수 있을까요? 아주 간단합니다. Nginx에는 내장된 php 모듈이 없기 때문에 php 페이지를 처리하기 위해 fastcgi 프로세서가 필요합니다 (php-fpm을 사용하는 것이 spawn-cgi보다 낫습니다). 그래서 이제 무엇을 사용해야 할까요? 마이크로캐싱을 사용하세요!
마이크로캐싱이란?
마이크로캐싱이란 무엇인가요? 이론적으로는 파일 등을 짧은 시간(예: 1초) 동안 캐시하는 것입니다. 이는 사용자가 페이지를 요청할 때 캐시되므로 다음 요청은 캐시에서 오게 됩니다. 5초 이내에 100명의 사용자가 요청하면 20명 중 1명만 전체 페이지를 구축해야 합니다 (Nginx와 잘 구조화된 사이트에서는 문제가 되지 않습니다).
믿을 수 없어요!
믿어야 합니다! 예를 들어, 지금 보고 있는 이 웹사이트를 생각해 보세요. 200명의 동시 사용자와 함께 1000개의 요청으로 부하 테스트를 한다고 가정해 보겠습니다. Apache에서 이 웹사이트를 실행하면 초당 10-40개의 요청을 받을 수 있습니다, 최대! 그리고 웹 서버는 심각한 부하를 받게 되고 환경을 확장해야 할 것입니다. Nginx에서 php-fpm을 사용하고 마이크로캐싱 없이도 같은 상황입니다 (아마 요청이 조금 더 많겠지만 서버는 요청을 처리하기 위해 많은 php-fpm 프로세스를 실행해야 합니다). 마이크로캐싱을 사용하면 초당 300-450개의 요청을 받을 수 있습니다!
알겠어요, 주세요!
마이크로캐싱은 실제로 설정하기 쉽습니다. 아래는 PHP로 만든 모든 웹사이트에 대해 실행할 수 있는 예제 구성입니다 (이 경우 Wordpress에 특정합니다). 살펴보세요:
#
# 당신의 웹사이트
#
server {
listen 80;
server_name ;
access_log main;
error_log ;
root ;
location / {
index index.php index.html index.htm;
}
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php?q=$1 last;
}
location ~ \.php$ {
# 기본 변수 설정
set $no_cache "";
# GET/HEAD가 아닌 경우 캐시하지 않고 사용자에게 1초 동안 비캐시 가능으로 표시
if ($request_method !~ ^(GET|HEAD)$) {
set $no_cache "1";
}
# 필요 시 비캐시 쿠키 삭제
# (어떤 이유로, add_header는 이전 if 블록에 포함되면 실패)
if ($no_cache = "1") {
add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/";
add_header X-Microcachable "0";
}
# 비캐시 쿠키가 설정된 경우 캐시 우회
if ($http_cookie ~* "_mcnc") {
set $no_cache "1";
}
# 플래그가 설정된 경우 캐시 우회
fastcgi_no_cache $no_cache;
fastcgi_cache_bypass $no_cache;
fastcgi_cache microcache;
fastcgi_cache_key $server_name|$request_uri;
fastcgi_cache_valid 404 30m;
fastcgi_cache_valid 200 10s;
fastcgi_max_temp_file_size 1M;
fastcgi_cache_use_stale updating;
fastcgi_pass localhost:9000;
fastcgi_pass_header Set-Cookie;
fastcgi_pass_header Cookie;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
#fastcgi_intercept_errors on;
include fastcgi_params;
}
} nginx.conf에 캐시 형식과 캐시 영역도 추가해야 합니다. http {} 블록에 다음 줄을 추가하세요:
fastcgi_cache_path /var/cache/nginx2 levels=1:2 keys_zone=microcache:5m max_size=1000m;
log_format cache '$remote_addr - $remote_user [$time_local] "$request" '
'$status $upstream_cache_status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';시도해 보세요!
모두가 직접 시도해 보고 성능 향상을 확인해 보기를 권장합니다! Apache에서 Nginx로 전환하는 것은 큰 변화라는 것을 알고 있지만, 정말 빠르게 익힐 수 있습니다!
더 많은 기사가 곧 나올 예정이니 http://livebyt.es를 확인하세요!
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.