@MirKey

Как сделать выдачу статики с параллельным вызовом fastcgi без ожидания его завершения?

Сервер выдаёт статический контент, при запросе нужно выдать файлы, но при этом отправить в fastcgi/python скрипт информацию о запросе для статистики. То есть ждать ответа от fastcgi не нужно. Fastcgi не должен участвовать в обработке запроса, на нём только статистика.
Если fastcgi не доступен, то ни как не реагировать - т.е. не должен выбрасывать ошибку.
  • Вопрос задан
  • 69 просмотров
Решения вопроса 1
ky0
@ky0 Куратор тега Nginx
Миллиардер, филантроп, патологический лгун
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker
Программист, энтузиаст
А для чего вам такое странное поведение?
Вообще тут много вопросов из вашей постановки вытекает. Очень тревожных и странных вопросов.
Начать можно с чего. Вы ставите вопрос так, будто хотите передавать данные "в скрипт". Надо перестраивать ход мысли. Вы передаёте данные в некий сторадж. Это может быть некая структура в памяти процесса (например вашего FastCGI-сервера), или в БД (postgres, sqlite, clickhouse, redis), или в очереди какой-нибудь (rabbit, кафка)... Данные не могут передаваться в код. Разве что в виде параметров и аргументов.
Опять же, ваш FastCGI может быть запущен в нескольких инстансах, как вы будете заботиться о синхронзации? Прочитайте про CAP-теорему. Если вы городите какое-то самодельное решение, то вам придётся как следует понимать суть этой теоремы, проблемы, которые она обрисовывает и то, на каких двух стульях из трёх вы хотите сидеть.

Если вы подробнее расскажете о своей задаче, то вам подскажут какими способами правильнее такие вещи делать. Пока что складывается ощущение, что в момент отдачи статики вы хотите делать http-запросы вашему бэкенду. Для чего? Считать статистику? Биллинг?

Вообще лучше всеми этими вопросами не грузить ваш nginx, хотя там можно даже lua-скрипты встраивать с нетривиальной логикой. Для некоторых нужд можно парсить, например, логи nginx-а. Настроить так, чтобы в нужный пайп сыпалось только то, что требуется и отдельным микросервисом его вычитывать и делать что там вам требуется. Агрегировать? Статистику считать? Журналировать?
Так же можно поднять какую-то очередь и заставить nginx туда писать по факту обращений.
Вообще там много вопросов будет. А что если к файлу обратились, но контент не качали, только заголовок? А что если разрыв соединения? А что если один большой файл много раз фрагментами докачивали? А что если кто-то себе поставил перед вашим сервером кэширующий прокси?

Теги вашего вопроса следует привести в соответствие с правилами. Тег Python не нужен, ведь вы не привели никакого кода и к питону ваш вопрос совершенно никакого отношения не имеет.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы