Обслуживание динамического контента из Mongo GridFS через Nginx без ошибки 404 - PullRequest
1 голос
/ 20 декабря 2011

У меня есть динамический контроллер контента в CodeIgniter, который извлекает изображения из GridFS. На сервере запущен nginx, и я пытаюсь установить заголовки управления кэшем в моей конфигурации nginx, чтобы кэшировать изображения, обслуживаемые этим динамическим контроллером контента, в течение 7 дней. У меня правильно настроен конфиг в моей конфигурации nginx, но я получаю 404 заголовка от nginx, потому что файлы физически не существуют на сервере.

Моя директива управления кэшем выглядит следующим образом:

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires 7d;
    log_not_found off;
}

log_not_found помогает nginx не регистрировать ошибку 404, но заголовки, отправляемые в браузер, по-прежнему содержат ошибки 404. Я попытался установить заголовки вручную с помощью функции php «header», но поскольку nginx использует php-fpm, он делал странные вещи.

Может ли кто-нибудь указать мне правильное направление, как правильно настроить заголовки управления кэшем для этой ситуации? Спасибо всем =)

UPDATE:

Я изменил свой nginx conf со специальным расположением для всех моих статических файлов и моего динамического контроллера.

location ~ ^/(dres|js|css|art)/ {
    access_log off;
    expires 7d;
    add_header Cache-Control public;
    try_files $uri $uri/ /index.php?$args;
}

Nginx устанавливает правильные заголовки expires для статических файлов, но я не могу на всю жизнь получить fastcgi и nginx для вывода заголовков expires для динамически выводимых изображений. Я должен что-то упустить в моей конфигурации fastcgi, чтобы разрешить истечение срока действия заголовков при обслуживании файлов php.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2011

Решено по большей части. Понял, что с помощью функции php «header» работал, были другие проблемы, которые заставляли меня думать, что это не так. Я только что добавил это в свой динамический контроллер изображения:

// seconds, minutes, hours, days
$expires = (60*60*24*7);
header("Pragma: public");
header("Cache-Control: maxage=".$expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');       

Теперь, по крайней мере, срок действия работает так, как я хочу для динамических изображений. Я не понял, как указать срок действия для статических файлов, не получая 404 на этих динамических изображениях, но сейчас это лучше.

0 голосов
/ 20 декабря 2011

Разве вы не должны установить fastcgi_cache для этого?

...