NGINX와 Lua를 사용하여 요청이 들어왔을 때 캐시에서 확인하고, 캐시 히트 시 캐시에서 응답을 반환하고, 그렇지 않으면 상위 서버로 요청을 리다이렉트하는 스크립트 및 설정을 작성해 보겠습니다.
1. NGINX 설정
우선, NGINX 설정에서 Lua를 활성화하고, 캐시를 설정하는 방법을 다룹니다. 이 설정에서는 ngx_http_lua_module
모듈을 사용하여 요청을 처리하고, Lua 스크립트를 이용해 캐시 확인 및 리다이렉션을 처리합니다.
nginx.conf 설정 예시
2. 캐시 동작 설명
- 캐시 확인:
access_by_lua_block
안에서 캐시된 데이터가 있는지 확인합니다. 만약 캐시에서 데이터를 찾으면, 해당 데이터를 클라이언트에 즉시 반환하고 응답을 종료합니다(ngx.exit(ngx.HTTP_OK)
).
- 캐시 미스:
- 캐시에서 데이터를 찾지 못하면
proxy_pass
지시어를 사용하여 상위 서버로 요청을 전달합니다. 여기서는http://backend_server
로 요청이 리다이렉트됩니다.
- 캐시에서 데이터를 찾지 못하면
- 캐시 저장:
- 응답이 반환된 후,
header_filter_by_lua_block
에서 응답 데이터를 캐시에 저장합니다. 이 예시에서는 응답 본문을 캐시하고, 1시간 동안 유효하도록 설정했습니다.ngx.shared.my_cache:set
으로 캐시 키와 데이터를 저장합니다.
- 응답이 반환된 후,
3. 캐시를 위한 Lua 스크립트
위 설정에서 Lua는 캐시와 관련된 로직을 처리합니다. ngx.shared.my_cache
는 공유 메모리 영역을 사용하여 캐시 데이터를 저장하고 관리하는 데 사용됩니다.
- 캐시 키 생성:
set $cache_key $uri;
에서 URI를 캐시 키로 사용하고 있습니다. 필요에 따라 다른 방식으로 키를 생성할 수 있습니다. - 캐시 저장 및 조회: Lua 코드에서는
ngx.shared.my_cache:get()
으로 캐시를 조회하고,ngx.shared.my_cache:set()
으로 캐시를 저장합니다.
4. 상위 서버 설정
상위 서버(backend_server
)에 대한 설정은 기본적으로 NGINX가 리버스 프록시로 처리하는 방식입니다. 이를 위해 proxy_pass
지시어를 사용하여 상위 서버로 요청을 전달합니다. 상위 서버는 실제 데이터를 제공하며, 이 데이터는 캐시에 저장됩니다.
결론
이 NGINX와 Lua 설정은 캐시에서 확인 후, 히트 시 캐시된 데이터를 반환하고, 캐시 미스 시에는 상위 서버로 요청을 리다이렉트하여 데이터를 가져오고 캐시하는 방식으로 작동합니다. 이 방법을 통해 효율적인 캐시 관리와 빠른 응답을 제공할 수 있습니다.