공유할 서비스 선택

TECH


TECH

Middleware (Cache-1) Nginx reverse proxy 로 Cache 기능활용

페이지 정보

작성자 미들웨어 아이디로 검색 전체게시물 댓글 0건 조회 3,413회 좋아요 0회 작성일 21-02-07 12:40

본문

안녕하세요. 미들웨어 입니다.

 

이번에는 Cache 에 대해 정리를 해보겠습니다.

 

요즘 대용량 트래픽이 들어오는 경우 대처 방법에 대해 많이들 물어보시는 것 같네요.

예를들어.. 시스템이 동접 10만명으로 구성되있는데, 순간 트래픽이 100만명이 들어온다!! 그럼 어떻게 대응해야 할가요?

 

여러가지 대응 방법이 있습니다. 

음.. 일반적으로 많이 사용하는 방법으로는 오픈소스를 활용해서 Cache 서버를 구성하여 활용하는 방법이 있습니다.

돈이 여유가 된다면 넷퍼넬과 같은 유료 소프트웨어를 구매한뒤 운영해도 되지만, 꽤 고가인만큼 일반적으로 사용하긴 어렵습니다.

Cache 서버로 대표적인 것들이 여러개 있습니다.

AWS Cloud-Front, CDN (Content delivery network) 등 여러 제품이 있는데 CDN을 활용하는 것이 상당히 좋습니다.

Nginx 에서도 CDN이 없을경우 Cache 를 구성하여 성능을 높일 수가 있는데, 그 기능을 reverse proxy 설정을 통해 구현 가능합니다.

 

실제 사례로 저 또한 Nginx Cache를 활용하여 기존 2초대 응답을 보였던 시스템페이지를 0.3초로 응답속도 TPS를 줄였습니다.

성능은 검증된걸로 알고계셔도 좋습니다

 

 

Nginx reverse proxy로 cache 기능을 활용하는 방법에 대해 정리해보겠습니다.

 

1. Nginx Cache 란??

- Nginx reverse proxy (리버스프록시)

웹 서버(Nginx)와 웹 어플리케이션 서버 (Tomcat)를 분리하여 웹 서버를 프록시 서버로 두어 

사용자의 요청을 캐시하여 동일한 요청이 오면 웹 어플리케이션 서버에 전달하지 않고 웹 서버에 캐시된 내용을 

바로 전달하도록 하여 성능상의 이점을 얻기 위해 사용합니다.

 

NGINX로 역방향 프록시를 설정하고 두 개의 애플리케이션 (하나는 NGINX에, 다른 하나는 아파치에)을 설정합니다

16a5efd2c905a2dac3284dbcb22d63cd_1612669278_6071.png
 

 

 

- proxy_cache_key

각 캐시파일을 구분하기 위한 Key 규칙을 설정 

유저 쿠키 별로 캐시 구성도 가능 (하나의 HTML 문서에 정적 컨텐츠와 동적 컨텐츠가 함께 있을 때)

 

- 쿠키를 기반으로 콘텐츠 캐싱 (login 화면)

하나의 HTML 문서에 정적 컨텐츠와 동적 컨텐츠가 함께 있을 때

쿠기(cookie)를 이용해서 이 문제를 해결 했다. 아래와 같이 proxy_cache_key에 cookie_login을 설정했다.

유저가 로그인에 성공하면 SetCookie("login", "true")로 login 쿠키를 설정한다. 

로그아웃 하면 SetCookie("login","")로 쿠키를 삭제한다. 

이렇게 하면 동일한 페이지라고 하더라도 로그인과 로그아웃 상태별로 캐시파일을 만들 수 있다.

 

 

2. Nginx 캐시진행 순서

- NginX 캐시 서버가 컨텐츠 요청을 받는다.

- 요청 URL을 Key로 컨텐츠가 캐시돼 있는지 확인한다.

- 처음 요청이므로 캐시 실패(MISS) 한다.

- WAS서버로 요청을 보낸다.

- WAS서버로 부터 응답이 오면 캐시를 할지를 검사한다.

- 응답을 디스크에 저장한다.

- 다음 번에 같은 URI로 요청이 오면, 캐시 적중(HIT)한다. 요청은 WAS로 전달되지 않으며, 캐시서버가 대신 응답한다.

 

 

3. nginx.conf 설정방법 정리

https://www.nginx.com/resources/wiki/start/topics/examples/reverseproxycachingexample/


- nginx.conf 설정 부분입니다.
http {
    proxy_cache_path  /data/nginx/cache  levels=1:2    keys_zone=STATIC:10m
    inactive=24h  max_size=1g;
    server {
        location / {
            proxy_pass             http://1.2.3.4;
            proxy_set_header       Host $host;
            proxy_buffering        on;
            proxy_cache            STATIC;
            proxy_cache_valid      200  1d;
            proxy_cache_use_stale  error timeout invalid_header updating
                                   http_500 http_502 http_503 http_504;
        }
    }
}

 

 

 

 

4. Nginx Cache 메뉴얼 

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache 

위 링크를 들어가보면 Nginx Cache 을 할 수 있는 많은 모듈 및 명령어 샘플을 확인할 수 있고, 원하는 설정값으로 설정가능하다.


16a5efd2c905a2dac3284dbcb22d63cd_1612669479_5081.png

 

 

Syntax:proxy_cache zone | off;
Default:
proxy_cache off;
Context:httpserverlocation

Defines a shared memory zone used for caching. The same zone can be used in several places. Parameter value can contain variables (1.7.9). The off parameter disables caching inherited from the previous configuration level.

Syntax:proxy_cache_background_update on | off;
Default:
proxy_cache_background_update off;
Context:httpserverlocation

This directive appeared in version 1.11.10.

Allows starting a background subrequest to update an expired cache item, while a stale cached response is returned to the client. Note that it is necessary to allow the usage of a stale cached response when it is being updated.

Syntax:proxy_cache_bypass string ...;
Default:
Context:httpserverlocation

Defines conditions under which the response will not be taken from a cache. If at least one value of the string parameters is not empty and is not equal to “0” then the response will not be taken from the cache:

proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
proxy_cache_bypass $http_pragma    $http_authorization;

Can be used along with the proxy_no_cache directive.

Syntax:proxy_cache_convert_head on | off;
Default:
proxy_cache_convert_head on;
Context:httpserverlocation

This directive appeared in version 1.9.7.

Enables or disables the conversion of the “HEAD” method to “GET” for caching. When the conversion is disabled, the cache key should be configured to include the $request_method.


이번 가이드는 Nginx 의 cache 활용 방법이였습니다.


 


댓글목록

등록된 댓글이 없습니다.

TECH 목록
번호 제목 작성자 작성일 조회수
202 OS OSworker 아이디로 검색 전체게시물 04-14 31
[교육] RH174 : Managing CentOS Migrations and RHEL Upgrades

카테고리 : OS

31 0
작성자 : OSworker 24/04/14
201 Middleware 미들웨어 아이디로 검색 전체게시물 04-08 34
(오픈소스 활용-28) Java Flight Recorder 이란? Java 모니터링을 구현가능

카테고리 : Middleware

34 0
작성자 : 미들웨어 24/04/08
200 OS OSworker 아이디로 검색 전체게시물 04-03 708
[보안취약점] XZ유틸즈에서 발견된 백도어 `CVE-2024-3094`

카테고리 : OS

708 0
작성자 : OSworker 24/04/03
199 OS OSworker 아이디로 검색 전체게시물 03-30 92
레드햇 자격증 시험을 집에서~ 원하는 곳에서 볼수있는거 알고계셨나요?

카테고리 : OS

92 0
작성자 : OSworker 24/03/30
198 OS OSworker 아이디로 검색 전체게시물 03-24 143
RHEL7 to RHEL8 leapp으로 마이그레이션 하는 방법에 대해~

카테고리 : OS

143 0
작성자 : OSworker 24/03/24
197 Middleware 미들웨어 아이디로 검색 전체게시물 03-21 93
(오픈소스 활용-27) Redis Cache 란? 활용방법과 다운로드

카테고리 : Middleware

93 0
작성자 : 미들웨어 24/03/21
196 OS OSworker 아이디로 검색 전체게시물 03-17 125
Convert2RHEL를 사용하여 CentOS 7.9 에서 RHEL7.9로 전환해보겠습니다.

카테고리 : OS

125 0
작성자 : OSworker 24/03/17
195 Middleware 미들웨어 아이디로 검색 전체게시물 03-07 136
(weblogic 활용) WebLogic Kubernetes Toolkit-UI (무료) 설치 및 구성가이드

카테고리 : Middleware

136 0
작성자 : 미들웨어 24/03/07
194 OS OSworker 아이디로 검색 전체게시물 02-28 223
RHEL8부터는 네트워크 본딩을 구성하려면 nmcli 유틸리티를 사용해야 합니다. 레드햇 권고입니다.

카테고리 : OS

223 0
작성자 : OSworker 24/02/28
193 Middleware 미들웨어 아이디로 검색 전체게시물 02-20 321
(AI-2) Chat-GPT 4All - 허깅페이스 & LLM 국내 인기순위 (Open Ko-LLM LeaderBoard)

카테고리 : Middleware

321 0
작성자 : 미들웨어 24/02/20
Total 202건
게시물 검색

주식회사 클럭스| 대표 : 이찬호| 사업자등록번호 : 107-87-27655
주소 : 서울특별시 영등포구 국회대로 800, 여의도파라곤
E-mail : sales@chlux.co.kr
Copyright © 클럭스 www.chlux.co.kr All rights reserved.
상단으로Top