공유할 서비스 선택

TECH


TECH

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

페이지 정보

작성자 미들웨어 아이디로 검색 전체게시물 댓글 0건 조회 5,647회 좋아요 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 목록
번호 제목 작성자 작성일 조회수
254 OS OSworker 아이디로 검색 전체게시물 06-29 23
앞으로 RHEL 에서는 핫(Hot) DR 경우만 유료 라고 합니다~ 웜(Warm), 콜드(Cold)는 무료~!!!

카테고리 : OS

23 0
작성자 : OSworker 25/06/29
253 OS OSworker 아이디로 검색 전체게시물 06-22 72
RHEL 10 에서 pacemaker가 어떤것이 변경되었는지 찾아봤습니다.

카테고리 : OS

72 0
작성자 : OSworker 25/06/22
252 OS OSworker 아이디로 검색 전체게시물 06-10 122
EUS 는 알겠는데 EEUS는 뭔가요? Enhanced Extended Update Support

카테고리 : OS

122 0
작성자 : OSworker 25/06/10
251 OS OSworker 아이디로 검색 전체게시물 05-28 195
RHEL10에 탑재되어있는 RHEL LIGHTSPEED 소개 #RHEL9.6도가능 #RHELAI

카테고리 : OS

195 0
작성자 : OSworker 25/05/28
250 OS OSworker 아이디로 검색 전체게시물 05-23 212
두번째 RHEL10 소개 - RHEL10 Lifecycle 소개 및 News

카테고리 : OS

212 0
작성자 : OSworker 25/05/23
249 OS OSworker 아이디로 검색 전체게시물 05-13 283
드디어 RedHat Enterprise Linux 10이 나왔습니다. #RHEL10

카테고리 : OS

283 0
작성자 : OSworker 25/05/13
248 OS OSworker 아이디로 검색 전체게시물 05-01 323
xsos라고 들어보셨나요? #sosreport

카테고리 : OS

323 0
작성자 : OSworker 25/05/01
247 OS OSworker 아이디로 검색 전체게시물 04-23 453
sarchart 라고 들어보셨나요? sar datat 를 좀더 보기 편하게 만들어줍니다.

카테고리 : OS

453 0
작성자 : OSworker 25/04/23
246 OS OSworker 아이디로 검색 전체게시물 04-16 617
Sosreport 생성시에 OS 의 모든 sar 데이터가 포함되지 않아요. 해결방법은?

카테고리 : OS

617 0
작성자 : OSworker 25/04/16
245 OS OSworker 아이디로 검색 전체게시물 03-29 763
이슈 : sbd watchdog type stonith 사용시 메모리 누수 발생 #RHEL8.10 #RHEL9.4

카테고리 : OS

763 0
작성자 : OSworker 25/03/29
Total 254건
게시물 검색

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