백엔드 캐시를 존중하도록 nginx에 지시하는 방법은 무엇입니까? uWSGI

백엔드 캐시를 존중하도록 nginx에 지시하는 방법은 무엇입니까? uWSGI

거기에비슷한 질문하지만 거기의 해결책은 나에게 효과가 없습니다.

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_cacheafaik 일부 지시어 는 location. 또한 x-cache: MISSnginx가 클라이언트에 보내는 응답에도 있습니다 .

내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변1

Nginx 문서명시적으로 상태저것

헤더에 "Set-Cookie" 필드가 포함되어 있으면 해당 응답은 캐시되지 않습니다.

분명한 이유 때문에 해당 응답이 캐시되도록 쿠키를 보내지 않도록 애플리케이션을 만들어야 합니다. 쿠키는 응답 본문과 마찬가지로 클라이언트와 서버 모두에 대한 추가 데이터입니다.

관련 정보