Рейтинг:1

Кэширование статических файлов Nginx из разных папок

флаг cn

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

location ~* \.(?:css|cur|js|jpg|jpeg|webp|gif|htc|ico|png|html|xml|otf|ttf|eot|woff|woff2|svg)$ {

                истекает 1 год;
                доступ_лог выключен;
                add_header Cache-Control "public";
                tcp_nodelay выключен;
                open_file_cache макс. = 3000 неактивных = 120 с;
                open_file_cache_valid 45 с;
                open_file_cache_min_uses 2;
                open_file_cache_errors выключен;
}
        # передать PHP-скрипты на сервер FastCGI
        расположение ~ \.php$ {
                включить фрагменты/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
                включить fastcgi_params;
                fastcgi_intercept_errors включен;
        }
  место расположения / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

вот журнал ошибок

    17.08.2021 11:08:10 [ошибка] 278986#278986: *3642 open() "/var/www/website/public/cache/medium/product/347/rC0dMIdOJIJNSmpKgm9pVqKVE59HKAl8SKujwxHF.jpg" не удалось (2: таких нет файл или каталог), клиент: 95.85.108.178, сервер: ozan.com.tm, запрос: "GET /cache/medium/produ
ct/347/rC0dMIdOJIJNSmpKgm9pVqKVE59HKAl8SKujwxHF.jpg HTTP/2.0", хост: "www.website.tm", реферер: "https://www.website.tm/"

nginx отображает изображения из источника: https://website.tm/storage/velocity/category_icon_path/77/5wiasmLf6hQGAsjsTV4jXsjnG0ELm5ak0rgpV7c2.png

nginx не отображается из: https://website.tm/cache/medium/product/353/jtTzvdT8ZmB6Lu7wFKj969Uzj0qqu1qRUt2CxEbz.jpg

CodingInTheUK avatar
флаг cn
Какова цель кэширования изображений? Как вы сказали, это статический контент. Я могу ошибаться здесь, и если я ошибаюсь, я надеюсь, что кто-нибудь придет, чтобы исправить меня, но я считаю, что вам нужно только кэшировать «динамический» контент. Скажем, ваши веб-страницы поступают из базы данных, вы будете кэшировать страницы, которые изменяются нечасто, чтобы предотвратить повторное создание страницы при каждой загрузке, тем самым ускоряя загрузку. Изображения, на мой взгляд, такие же, как источник или кеш, если только вы не создаете изображения меньшего размера на лету. Тогда да кэш те.
CodingInTheUK avatar
флаг cn
Вы можете найти это полезным: https://serverfault.com/questions/861565/nginx-cache-images-generated-by-backend.
Michael Hampton avatar
флаг cz
Действительно, очень мало смысла снова кэшировать статические активы, поскольку они уже кэшированы для вас в памяти операционной системой, а nginx просто записывает вторую копию на диск, на поиск которой ему затем приходится тратить дополнительное время.
Рейтинг:1
флаг us

Блок местоположения вашего изображения отсутствует try_files директива, которая сообщает, что nginx должен обслуживать для запросов, попадающих в это место.

Добавлять

try_files $uri $uri/ =404;

к место расположения блокировать.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.