Există o întrebare similară dar soluția de acolo nu funcționează pentru mine.
Avem backend de anunțuri nginx și uWSGI. Avem nevoie de nginx pentru a stoca în cache răspunsul backend în funcție de ceea ce este în antetul răspunsului.
De exemplu, alerg curl -I https://example.com/api/project_data/
. Folosind tcpdump
Văd că backend-ul răspunde:
HTTP/1.1 200 OK
Tip de conținut: application/json
Variază: Accept, Accept-Language, Origin
Permite: GET, HEAD, OPTIONS
Cache-Control: public, max-age=3600
X-Request-ID: 6aa...0d99
X-Frame-Opțiuni: DENY
X-Content-Type-Options: nosniff
Set-Cookie: longterm_session=45c6...67; Domeniu=example.com;
Cu toate acestea, răspunsul nu este stocat în cache și nginx bate la backend de fiecare dată când este primită cererea.
Configurația 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”;
locație /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”;
}
am duplicat uwsgi_cache
doar pentru a fi pe partea sigură pentru că afaik unele directive nu sunt moștenite Locație
. De asemenea, există x-cache: DOAMNA
în răspunsul pe care nginx îl trimite clientului.
ce fac greșit?