거기에비슷한 질문하지만 거기의 해결책은 나에게 효과가 없습니다.
nginx 및 uWSGI 광고 백엔드가 있습니다. 응답 헤더의 내용에 따라 백엔드 응답을 캐시하려면 nginx가 필요합니다.
예를 들어, 나는 curl -I https://example.com/api/project_data/
. 사용하면 tcpdump
백엔드가 응답하는 것을 볼 수 있습니다.
HTTP/1.1 200 OK
Content-Type: application/json
Vary: Accept, Accept-Language, Origin
Allow: GET, HEAD, OPTIONS
Cache-Control: public, max-age=3600
X-Request-ID: 6aa...0d99
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Set-Cookie: longterm_session=45c6...67; Domain=example.com;
그럼에도 불구하고 응답은 캐시되지 않으며 nginx는 요청이 수신될 때마다 백엔드에 연결됩니다.
nginx 구성:
http {
uwsgi_cache_path /var/local/nginx_cache levels=2:2 use_temp_path=off inactive=1h keys_zone=mycache:20m ;
....
server {
....
uwsgi_cache mycache;
uwsgi_cache_key "$request_method$request_uri";
location /api/project_data/ {
add_header X-Cache $upstream_cache_status;
add_header Pragma "public";
uwsgi_pass 127.0.0.1:49002;
include uwsgi_params;
uwsgi_cache mycache;
uwsgi_cache_key "$request_method$request_uri";
}
uwsgi_cache
afaik 일부 지시어 는 location
. 또한 x-cache: MISS
nginx가 클라이언트에 보내는 응답에도 있습니다 .
내가 도대체 뭘 잘못하고있는 겁니까?
답변1
Nginx 문서명시적으로 상태저것
헤더에 "Set-Cookie" 필드가 포함되어 있으면 해당 응답은 캐시되지 않습니다.
분명한 이유 때문에 해당 응답이 캐시되도록 쿠키를 보내지 않도록 애플리케이션을 만들어야 합니다. 쿠키는 응답 본문과 마찬가지로 클라이언트와 서버 모두에 대한 추가 데이터입니다.