Kubernetes — кешированный контент Nginx удаляется при сохранении в томе AWS EFS
Я использую официальный образ Nginx с измененной конфигурацией для кэширования ответов источника. Конфигурация ниже
include
изд. в
http
блок внутри
/etc/nginx/nginx.conf
(Основной файл конфигурации для Nginx)
proxy_cache_path /var/nginx-cache
levels=1:2 # Directory levels when persisting cache (this is faster than one level)
keys_zone=fe_cache:500m # Memory zone and its space to speedup cache (800 keys/1m)
max_size=10g # All disk space if not set
inactive=30d # How long to keep things without being accessed
use_temp_path=off; # Don't know what is it, but it is recommended as off
server {
listen 80;
server_name _;
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
location / {
# Proxy_pass configuration
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_pass http://my.origin/;
# The cache zone we are using
proxy_cache fe_cache;
proxy_cache_min_uses 1;
proxy_cache_use_stale error timeout updating http_500 http_502
http_503 http_504;
#proxy_cache_background_update on;
proxy_cache_lock on;
# Add this header to the response
add_header X-Cache-Status $upstream_cache_status;
# If request contains token cookie, then don't save it to cache
proxy_no_cache $cookie_token;
# If request contains token cookie, then don't take it from cache
proxy_cache_bypass $cookie_token;
proxy_redirect off;
proxy_read_timeout 240s;
}
}
Этот образ Nginx работает как модуль Kubernetes с несколькими репликами. Чтобы повысить производительность, я пытаюсь использовать один и тот же объем кэша для этих реплик. Но проблема, с которой я столкнулся, заключается в том, что кешированный контент через некоторое время удаляется. Я заметил это, наблюдая за выводом этого скрипта (число, напечатанное здесь, иногда уменьшается)
while true; do
kubectl exec -it nginx-pod -- bash -c '
find /var/nginx-cache/ -type f | wc -l
' >> counts
done
Чтобы убедиться, что у меня нет какого-либо состояния гонки, я попытался уменьшить общее количество реплик до 1. Однако у меня все еще была та же проблема.
Наконец, я попытался хранить данные прямо в модуле без монтирования тома. Когда я это сделал, данные не удалялись.