Trong trường hợp bình thường, khi sử dụng proxy_cache_bypass
nginx sẽ tìm nạp một bản sao mới từ thượng nguồn và ghi đè lên phản hồi đã lưu trong bộ nhớ cache bằng bản mới.
Nhưng nếu URL thay đổi từ phản hồi có thể lưu trong bộ nhớ cache thành phản hồi không thể lưu trong bộ nhớ cache (ví dụ: thành phản hồi 4xx với Kiểm soát bộ đệm: không có bộ đệm
), sau đó sử dụng proxy_cache_bypass
thực sự sẽ cung cấp một bản sao mới từ thượng nguồn, nhưng nó sẽ để lại bản sao cũ trong bộ đệm.
Điều đó có nghĩa là mọi lúc URL được yêu cầu mà không cần kích hoạt proxy_cache_bypass
, nó sẽ tiếp tục phục vụ bộ đệm cũ.
Tôi đoán đây là một hành vi dự định, bởi vì proxy_cache_bypass
chỉ có ghi đè lên phản hồi được lưu trong bộ nhớ cache bằng cách lưu một phản hồi mới và một không có bộ đệm
phản hồi có nghĩa là không có gì để lưu? Đây có phải là những gì đang xảy ra?
Làm sao tôi có thể giải quyết việc này? Tôi không muốn bật bộ nhớ đệm cho phản hồi 4xx...
Tôi đang chạy 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 my-cache;
proxy_cache_key $remote_user$scheme$host$request_uri;
hết thời gian chờ lỗi 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-Status $upstream_cache_status;
tắt thẻ;