1

Я использую nginx 1.8.1 с микрокешем для кеширования некоторых php-запросов в /dev/shm и все работает нормально, однако, когда я перезагружаю сервер, кэшированные файлы исчезают (очевидно), но nginx по-прежнему ссылается на те, которые находятся в общей памяти (mustn не будет ли перезагрузка?).

Итак, что происходит, если я запрашиваю одну страницу, которая была кэширована ранее, она показывает ошибку 500 и дает мне пустой ответ.

То же самое происходит, если я позволю nginx кешировать некоторые страницы, а затем вручную удалить физические кешированные файлы.

Я должен перезагрузить nginx, чтобы он снова заработал.

Я думал, что если nginx не найдет файл кэша, он создаст новый. Это должно произойти? Должен ли я всегда перезагружать nginx после удаления файлов кэша вручную?

Есть ли способ для nginx автоматически воссоздать файл, если он не находит кэшированный файл?

Соответствующий код:

fastcgi_cache_path /dev/shm levels=1:2 use_temp_path=off keys_zone=mcache:16m inactive=600s max_size=512m;

А также:

fastcgi_keep_conn on;
fastcgi_connect_timeout 20s; 
fastcgi_send_timeout 30s; 
fastcgi_read_timeout 30s;
fastcgi_cache_lock   on;
fastcgi_cache_use_stale timeout updating;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache     $skip_cache;
fastcgi_cache        mcache;
fastcgi_cache_valid 200 301 302  5s;
fastcgi_cache_valid 403 404      5m;
add_header X-Proxy-Cache $upstream_cache_status;

Я имею:

sendfile off;

Но все же мне нужно перезагрузить (перезагрузка не исправляет) nginx для регенерации кеша. Я тестирую это на vultr 2Gb VM.

1 ответ1

0

Я нашел ответ :)

На мой код:

fastcgi_cache_path /dev/shm levels=1:2 use_temp_path=off keys_zone=mcache:16m inactive=600s max_size=512m;

Конкретно эта часть:

use_temp_path=off 

Это работает после того, как я удаляю эту часть и оставляю по умолчанию. Это связано с тем, что при его отключении в каталоге кэша создается temp папка, которую не следует удалять при очистке кэша.

Когда я делал это:

rm -rf /dev/shm/*

Кеш пропал, но также ушла временная папка ... Поэтому nginx не может использовать его для регенерации новых кэшированных файлов. Тот, который вы оставите по умолчанию (temp будет где-то еще), даже если я удалю весь кеш, он будет работать как положено.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .