공유할 서비스 선택

TECH


TECH

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

페이지 정보

작성자 미들웨어 아이디로 검색 전체게시물 댓글 0건 조회 3,352회 좋아요 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 목록
번호 제목 작성자 작성일 조회수
148 Middleware 미들웨어 아이디로 검색 전체게시물 04-24 743
(오픈소스 활용-18) VSCODE 설치 및 GIT 활용 연동 가이드

카테고리 : Middleware

743 0
작성자 : 미들웨어 23/04/24
147 Middleware 미들웨어 아이디로 검색 전체게시물 04-05 1049
(오픈소스 활용-17) 로컬 및 URL 호출 테스트 옵션 (curl, ab 옵션으로 부하주기)

카테고리 : Middleware

1,049 0
작성자 : 미들웨어 23/04/05
146 Middleware 미들웨어 아이디로 검색 전체게시물 03-20 573
(오픈소스 활용-16) Jstack을 활용하여 CPU급등한 프로세스 파일로 떨구기

카테고리 : Middleware

573 0
작성자 : 미들웨어 23/03/20
145 OS leechanho 아이디로 검색 전체게시물 03-15 1944
[쉘스크립트] 리눅스 시스템 정보수집 스크립트

카테고리 : OS

1,944 1
작성자 : leechanho 23/03/15
144 Middleware 미들웨어 아이디로 검색 전체게시물 03-08 1017
(Monitoring) Jennifer & Slack 연동 구성방법 (이벤트 발생 확인)

카테고리 : Middleware

1,017 0
작성자 : 미들웨어 23/03/08
143 Middleware 미들웨어 아이디로 검색 전체게시물 02-20 940
Coherence란 무엇인가?

카테고리 : Middleware

940 0
작성자 : 미들웨어 23/02/20
142 Middleware 미들웨어 아이디로 검색 전체게시물 02-08 1483
TP-monitor 란 무엇인가?

카테고리 : Middleware

1,483 0
작성자 : 미들웨어 23/02/08
141 Middleware 미들웨어 아이디로 검색 전체게시물 01-25 475
(weblogic 활용) Weblogic을 마켓에서 구매후 클릭으로 설치 -2

카테고리 : Middleware

475 0
작성자 : 미들웨어 23/01/25
140 Middleware 미들웨어 아이디로 검색 전체게시물 01-12 581
(weblogic 활용) Weblogic을 마켓에서 구매후 클릭으로 설치 -1

카테고리 : Middleware

581 0
작성자 : 미들웨어 23/01/12
139 Middleware 미들웨어 아이디로 검색 전체게시물 12-21 934
(오픈소스 활용-15) DB연동 테스트 샘플jsp (DBtest.jsp)

카테고리 : Middleware

934 0
작성자 : 미들웨어 22/12/21
Total 198건
게시물 검색

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