Обслуживание динамически генерируемых изображений с использованием Nginx и FastCGI - PullRequest
2 голосов
/ 25 августа 2011

Я использую Nginx, и мне нужно иметь возможность генерировать изображения на лету. Когда клиент отправляет запрос на изображение, мне нужно запустить внешнюю программу для генерации изображения. Внешняя программа оставляет сгенерированный образ в файловой системе.

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

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

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

1 Ответ

0 голосов
/ 25 августа 2011

X-Accel-Redirect - именно то, что вы ищете.
Пример использования можно найти здесь: http://kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/

Nginx является асинхронным, поэтому он будет обслуживать все остальные соединения без ожидания данных от вас FastCGIсценарий.

...