Server

nginx kill cache

개발허재 2023. 3. 9. 13:48

nginx를 restart 후 API에서 response값이 잘려서 리턴되어, json이 아닌 string으로 응답하는 이슈를 발견하였다.

따라서, nginx access log의 $body_bytes_sent 구문을 확인하였더니 같은 API 의 첫번째 호출보다 두번째 호출의 response 값의 크기가 절반으로 리턴되는 이슈를 확인하고, 캐싱처리가 지원되는 GET 메소드 API 에서만 발생하는 이슈로 확인되었다.

 

따라서, 아래와 같은 Config 설정을 넣어줘야한다.

server {
    listen       8080;

    charset UTF-8;

    location / {
        uwsgi_pass  django;
        include     /etc/nginx/uwsgi_params;
        proxy_read_timeout 2400;
        uwsgi_read_timeout 2400;
        
		################ 아래 캐싱관련 config 설정추가#############
        add_header Last-Modified $date_gmt;
        add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
        if_modified_since off;
        expires off;
        etag off;
    }
...
...
...
  • no-store: response를 캐시에 저장하지 않는다.
  • no-cache: response를 캐싱할 수 있지만 캐시된 response를 사용하기 전에 서버에서 확인
  • must-revalidate: 캐시된 response는 모든 다음 요청에서 서버와 함께 재검증
  • proxy-revalidate: must-revalidate와 유사하지만 중간 캐시(예: 프록시)에만 적용
  • max-age=0: age(캐싱된 순간부터 경과시간(초))에 관계없이 response가 캐시에서 제공되지 않는다.
  • if_modified_since: 클라이언트가 리소스의 캐시된 복사본을 사용할지 서버에서 새 복사본을 요청할지 결정하기 위해 특정 날짜 이후 리소스가 수정되었는지 확인하는 데 사용. 단, 서버의 로드가 증가할 수 있으며 클라이언트의 응답 시간이 느려질 수 있음
  • expires: 브라우저에서 응답을 캐시할 기간
  • etag: 캐시된 리소스의 유효성을 검사하기 위한 ETag 헤더의 사용여부