Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Вопрос про expires и add_header
- To: nginx-ru@xxxxxxxxx
- Subject: Re: Вопрос про expires и add_header
- From: Mikhail Mazursky <ash2kk@xxxxxxxxx>
- Date: Fri, 28 May 2010 11:45:12 +0600
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:received:in-reply-to :references:from:date:message-id:subject:to:content-type :content-transfer-encoding; bh=E/SbFC5JoUA4ddGphYUv1BSa5LHqTJ8arsxwfHfwGV4=; b=kYDWzNV5fXGkth/b1CE1fOJnoicKS8mDsJkvOBMM/ZcEuEWaRtBPjPmlGsHT52Gp+3 jnL/x71a9y9TaUhET/hBayr6OudyZWgodk+kOOxiLPGexuTxUXYwCyHd/H1+RzylFXpm H8I2EDxTfN8K+VweyxRJdzqXS748P35TCRGWU=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type:content-transfer-encoding; b=IphW12ndNB9p1yjgD2fYNtjZCq4tIgOBuFfWQTUaeanKxMhgD5gc9YkzNO4yJuM/Hz I5/DCYuve+KaHFWuNJ4xmzzmjjTQdpgkXTIVQJz+KvnI4+xIgylZ+3Yko+gs2skhwK6v 1s2F9QP6frKIXpEdIqrI2u9ph86dFVPHOMr20=
- In-reply-to: <20100527131255.GI71483@xxxxxxxxxxxxx>
- References: <AANLkTim8Y1Jihb4e1IXqNWOREvGX41LuzMTO0C1UU1ya@xxxxxxxxxxxxxx> <20100527131255.GI71483@xxxxxxxxxxxxx>
27 мая 2010 г. 19:12 пользователь Igor Sysoev <igor@xxxxxxxxx> написал:
> On Thu, May 27, 2010 at 12:27:09PM +0600, Mikhail Mazursky wrote:
>
>> Здравствуйте!
>>
>> Выяснил что директива expires не отрабатывает для 404, 500 и т.д.
>> Видимо работает для тех же кодов 200, 204, 301, 302 или 304, что
>> описаны в доках к add_header [1]. У меня картинкохостинг и если
>> картинки нет, то она и не появится. Я хочу заголовками говорить что
>> 404 тут на долго :) тем более у меня varnish до nginx'а. Тоже самое и
>> со статусом 50х - если fastcgi бекэнд, который делает тумбнейлы, лег,
>> то хотелось бы закешировать отдаваемую для этого картинку в varnish'е
>> ну к примеру на минуту.
>>
>> Почему бы не сделать настраиваемыми коды, для которых expires и
>> add_header срабатывают? По умолчанию сделать те, которые сейчас
>> "вшиты".
>
> В принципе, можно сделать что-то вроде
>
> expires 200 404 1h;
> add_header 200 404 ...
>
> Вопрос лишь в том, понимают ли это браузеры/прокси ?
В спецификациях HTTP в разделе про кешированиеи и т.п. я не нашел
упоминания про "валидность" заголовков только для каких-то
определенных статусов - видимо должно работать для всех.
Судя по аксес логам браузерный кеш для 404 работает в фаерфоксе и
хроме, в ИЕ8 не работает. Создал хтмл страничку с картинкой,
генерируемой бекэндом с такими заголовками:
Заголовки запроса:
GET /img/7e9108a76bedbd5e2626f9adc47d44cc.jpg HTTP/1.1
Host: host.tld
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.3)
Gecko/20100401 Firefox/3.6.3
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Заголовки ответа:
HTTP/1.1 404 Not Found
Server: nginx
Date: Fri, 28 May 2010 05:06:04 GMT
Content-Type: image/jpeg
Connection: keep-alive
Content-Length: 24787
Expires: Thu, 31 Dec 2037 23:55:55 GMT
После повторного захода на страницу запроса к картинке нет вообще.
> Кстати, если у создаваемых fastcgi'ем картинок нет Last-Modifed/ETag,
> то это можно кэшировать nginx'ом без varnish'а.
У меня есть два типа тумбнейлов:
1. для обычных картинок - они хранятся в mogilefs как и исходные
картинки. Отдается Last-Modifed+Expires max;
2. для картинок с сообщениями об ошибках. Для кодов 404, 50х для
тумбнейлов выдаются специальные картинки того размера, которого должен
был быть тумбнейл. Хочу отдавать Expires 1m для 50х и max для 404.
Первые, после пережатия бекэндом, записываются в mogilefs и в
дальнейшем отдаются оттуда. А вторые используют fastcgi_cache. Все
картинки кешируются varnish'ем вне зависимости от кода ответа, время
кеширования varnish берет из заголовков ответа nginx'а. Конечно можно
было бы руками написать в конфиге varnish'а что ему надо кешировать
404 и 50х и на сколько, но я думаю в данном случае "правильнее"
отдавать такие заголовки nginx'ом. К тому же на пути запроса/ответа
могут быть другие прокси.
Если было бы можно, я бы сделал вот так
expires 200 404 max;
expires 500 502 503 504 1m;
Спасибо!
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|