ภายใต้สถานการณ์ปกติเมื่อใช้งาน proxy_cache_bypass
nginx จะดึงสำเนาใหม่จากอัปสตรีม และเขียนทับการตอบกลับที่แคชด้วยอันใหม่
แต่ถ้า URL เปลี่ยนจากการตอบสนองที่แคชได้ไปเป็นการตอบสนองที่แคชไม่ได้ (เช่น เป็นการตอบสนอง 4xx ที่มี การควบคุมแคช: ไม่มีแคช
) แล้วใช้ proxy_cache_bypass
จะให้บริการสำเนาใหม่จากอัปสตรีม แต่จะทิ้งสำเนาเก่าไว้ในแคช
ซึ่งหมายความว่าทุกครั้งที่มีการร้องขอ URL โดยไม่มีทริกเกอร์ proxy_cache_bypass
มันจะให้บริการแคชเก่าต่อไป
ฉันเดาว่านี่เป็นพฤติกรรมที่ตั้งใจเพราะ proxy_cache_bypass
เท่านั้น เขียนทับ แคชการตอบสนองโดยการบันทึกใหม่ และ ไม่มีแคช
การตอบสนองหมายความว่าไม่มีอะไรจะบันทึก? นี่คือสิ่งที่เกิดขึ้น?
ฉันจะแก้ปัญหานี้ได้อย่างไร ฉันไม่ต้องการเปิดใช้งานการแคชสำหรับการตอบสนอง 4xx...
ฉันใช้ nginx/1.14.2
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my-cache:70m max_size=28g inactive=1d;
proxy_temp_path /var/cache/nginx/tmp;
proxy_cache แคชของฉัน;
proxy_cache_key $remote_user$scheme$host$request_uri;
ข้อผิดพลาด proxy_cache_use_stale หมดเวลา invalid_header http_500 http_502 http_503 http_504 http_429;
proxy_cache_bypass $http_cache_control;
proxy_read_timeout 90;
add_header X-Cache-สถานะ $upstream_cache_status;
etag ปิด;