Как выдавать статику или генерировать статистику с помощью nginx?

Есть некий статичный ресурс, хранилище... static.site.com

В нём лежит как бы "вечный кеш" некоторых динамических файликов.
Для простоты в приложении ссылка сразу идёт на адрес static.site.com
Но если файл никогда не запрашивали его там, нет и мы должны его сгенерировать. server static ничего не знает о скриптах и не имеет доступа к php.

Я реализовал такое вот вполне стандартное решение:

if (!-e $request_filename) {
      rewrite ^/dir/file(.*)_(.*).ext https://api.site.com/generate?a$1&b=$2 break;
    }


Файл успешно генерируется, однако и после того, как он появился уже по адресу static.site.com/dir/fileX_Y.ext - он всё равно продолжает редиректить запрос на api.site.com, не могу понять причины.

Пробовал также вариант обернуть всё в location /dir/ и идти от неё, но не помогло.

Остальные строки конфига не привожу, так как к делу отношения не имеют. Типо сжатие текстов и настройки кеша.
listen 443 ssl http2 если что. Location внутри server на данный момент нет вовсе.
  • Вопрос задан
  • 229 просмотров
Пригласить эксперта
Ответы на вопрос 3
mgyk
@mgyk
Совсем непонятно как фаил должен появится на сервере nginx?
Вариант c try_files и редиректом при отсутсвии фаила идет не другой ресурс и все. Локально он от этого не появится.
https://www.nginx.com/blog/nginx-caching-guide/ Нужно крутить кэширование ответов на стороне nginx.
Ответ написан
@BorisKorobkov
Web developer
if (!-e $request_filename) {
rewrite ...
}

Лучше использовать try_files

Файл успешно генерируется, однако и после того, как он появился уже по адресу static.site.com/dir/fileX_Y.ext - он всё равно продолжает редиректить запрос на api.site.com, не могу понять причины.

Браузерный кэш
Ответ написан
Попробуйте так хотя не очень силен в nginx:
location ~ ^/dir/file(.*)_(.*).ext$ {
        try_files $uri https://api.site.com/generate?a$1&b=$2;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы