มี คำถามที่คล้ายกัน แต่วิธีแก้ปัญหานั้นไม่ได้ผลสำหรับฉัน
เรามีแบ็กเอนด์โฆษณา nginx และ uWSGI เราต้องการ nginx เพื่อแคชการตอบสนองส่วนหลังตามสิ่งที่อยู่ในส่วนหัวการตอบสนอง
ตัวอย่างเช่น ฉันวิ่ง ขด -I https://example.com/api/project_data/
. โดยใช้ tcpdump
ฉันเห็นแบ็กเอนด์ตอบกลับ:
HTTP/1.1 200 ตกลง
ประเภทเนื้อหา: application/json
Vary: ยอมรับ, ยอมรับภาษา, ที่มา
อนุญาต: รับ หัว ตัวเลือก
การควบคุมแคช: สาธารณะ อายุสูงสุด=3600
X-Request-ID: 6aa...0d99
X-Frame-Options: ปฏิเสธ
X-Content-Type-Options: ไร้สาระ
ตั้งค่าคุกกี้: longterm_session=45c6...67; โดเมน=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 ;
....
เซิร์ฟเวอร์ {
....
uwsgi_cache มายแคช;
uwsgi_cache_key "$request_method$request_uri";
ตำแหน่ง /api/project_data/ {
add_header X-Cache $upstream_cache_status;
add_header Pragma "สาธารณะ";
uwsgi_pass 127.0.0.1:49002;
รวม uwsgi_params;
uwsgi_cache มายแคช;
uwsgi_cache_key "$request_method$request_uri";
}
ฉันทำซ้ำ uwsgi_cache
เพียงเพื่อความปลอดภัยเพราะ afaik บางคำสั่งไม่ได้รับการสืบทอดมา ที่ตั้ง
. นอกจากนี้ยังมี x-แคช: MISS
ในการตอบกลับ nginx ส่งไปยังลูกค้า
ผมทำอะไรผิดหรือเปล่า?