본문 바로가기
서버구축 (WEB,DB)

Nginx Reverse Proxy Content Caching 이해와 설정 방법

by 날으는물고기 2023. 11. 23.

Nginx Reverse Proxy Content Caching 이해와 설정 방법

NGINX High-Performance Caching – NGINX

Nginx에서 특정 경로를 캐시하지 않으려면, proxy_no_cache 디렉티브를 사용하여 해당 경로를 지정하고 캐시를 사용하지 않도록 설정해야 합니다. 아래는 Nginx 구성 파일에서 / 경로를 캐시하지 않는 방법을 보여주는 예제입니다.

location / {
    proxy_no_cache 1;
    proxy_cache_bypass $http_pragma $http_authorization;
    # 다른 프록시 설정 옵션들...
}

위의 예제에서 location /은 루트 경로를 나타냅니다. / 경로의 요청을 캐시하지 않으려면 proxy_no_cache 1;을 설정합니다. 또한 proxy_cache_bypass 지시어를 사용하여 특정 헤더 ($http_pragma$http_authorization)가 존재할 경우 캐시를 우회하도록 설정할 수 있습니다.

 

이 설정을 Nginx 구성 파일에 추가한 후, Nginx를 다시 로드하거나 재시작해야 합니다.

 

다음으로 Nginx 캐싱 설정에 대한 기본 설정이 필요합니다. 아래는 간단한 캐싱 설정 예제입니다.

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m;
proxy_cache my_cache;

location / {
    proxy_pass http://backend_server;
    proxy_cache_valid 200 1h; # 성공 응답을 1시간 동안 캐시합니다.
    # 다른 캐싱 설정 옵션들...
}

이렇게 설정하면 / 경로에 대한 요청이 캐시되지 않을 것입니다. 필요에 따라 캐시 설정을 더 자세히 조정할 수 있습니다.

 

Nginx에서 proxy_no_cache 지시어는 if 블록 내부에서 직접 사용할 수 없습니다. proxy_no_cache 지시어는 location 블록 내부에서 사용해야 합니다. 대신, if 블록을 사용하여 조건에 따라 proxy_no_cache를 설정할 수 있는 다른 방법이 있습니다.

 

아래는 조건부로 proxy_no_cache를 설정하는 예제입니다.

location / {
    set $no_cache 0;

    if ($target != "") {
        set $no_cache 1;
    }

    proxy_no_cache $no_cache;
    proxy_cache_bypass $no_cache;

    # 다른 프록시 설정 옵션들...
}

위의 구성에서는 set 지시어를 사용하여 $no_cache 변수를 설정하고, if 블록 내부에서 $target 변수의 값에 따라 $no_cache 변수를 설정합니다. 그런 다음 proxy_no_cacheproxy_cache_bypass를 이 변수에 따라 설정하고, 이 변수의 값에 따라 캐시 동작이 조정됩니다.

 

이렇게 하면 proxy_no_cacheif 블록 내부에서 직접 사용하는 문제를 해결할 수 있습니다.

 

좀 더 자세하게 알아보자면, proxy_no_cache는 Nginx에서 프록시 역할을 하는 경우에 캐시를 사용하지 않을 때 설정하는 지시어입니다. 이를 통해 Nginx는 백엔드 서버로부터 받은 응답을 캐시하지 않고 매번 새로운 응답을 받아오게 됩니다.

사용 용도

  1. 실시간 데이터
    • 만약 백엔드 서버에서 제공하는 데이터가 실시간으로 변경되는 경우에는 캐싱이 적절하지 않을 수 있습니다. 이런 상황에서 proxy_no_cache를 사용하여 항상 신선한 데이터를 가져올 수 있습니다.
  2. 동적 콘텐츠
    • 동적으로 생성되는 콘텐츠의 경우, 매 요청마다 백엔드에서 새로 생성되는 경우가 많습니다. 이 경우에는 캐싱을 피하고 매번 최신 데이터를 가져오기 위해 proxy_no_cache를 사용할 수 있습니다.
  3. 보안 갱신
    • 보안 갱신이 필요한 경우, 예를 들어 사용자의 프로필 정보와 같은 민감한 정보를 다루는 경우, 캐싱을 피하고 항상 최신 정보를 제공하는 것이 중요합니다.

사용법과 원리

proxy_no_cache는 Nginx의 location 블록에서 설정하며, 캐시를 사용하지 않을 요청을 지정합니다. 설정은 다음과 같이 사용됩니다.

location / {
    proxy_pass http://backend_server;
    proxy_no_cache 1;
    proxy_cache_bypass $http_upgrade;
    # 기타 프록시 설정들...
}

위의 예제에서 proxy_no_cache는 캐시를 사용하지 않을 것을 지정하고, proxy_cache_bypass는 업그레이드 요청이 오는 경우에도 캐시를 우회하도록 설정합니다.

 

proxy_no_cache의 원리는 간단합니다. 이 설정이 있는 경우 Nginx는 매 요청마다 백엔드 서버로부터 새로운 응답을 가져오게 됩니다. 즉, 캐시를 거치지 않고 매번 백엔드로부터 데이터를 가져와 클라이언트에게 전달합니다.

사용해야 하는 경우

  1. 항상 최신 데이터가 필요한 경우
    • 캐시된 데이터가 고정적이지 않고 항상 최신 데이터가 필요한 경우에 사용합니다.
  2. 실시간 업데이트
    • 데이터가 실시간으로 업데이트되는 경우, 매번 새로운 데이터를 가져와야 하는데, 이때 proxy_no_cache가 유용합니다.
  3. 보안 및 권한 관리
    • 민감한 정보에 대한 접근이나 권한 관리가 필요한 경우에는 캐싱을 피하고 항상 서버에서 최신 정보를 가져오는 것이 좋습니다.

proxy_no_cache는 이러한 상황에서 Nginx의 캐시 동작을 효과적으로 제어하는데 사용됩니다.

728x90

댓글