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 헤더의 사용여부