<br><br>вторник, 7 января 2014 г. пользователь Gena Makhomed  писал:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 07.01.2014 12:59, Илья Шипицин wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 04.01.2014 3:07, S.A.N wrote:<br>
</blockquote></blockquote>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Бекенд, не знает и не должен знать, какой тип кеша<br>
ему нужно ревалидировать, клиентский или кеш Nginx,<br>
по хорошему в первом и во втором случаи, механизм<br>
должен быть полностью одинаковым.<br>
</blockquote></blockquote></blockquote>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
каким же образом тогда nginx может узнать, какие ответы от<br>
backend`а ему следует сохранять в своем кеше, а какие нет?<br>
</blockquote></blockquote>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
каким образом - в треде это явно предлагалось, путем<br>
</blockquote>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
1) кеширования контента, у которого выставлен max-age=0 (или остутствует)<br>
</blockquote>
<br>
каким образом это поможет бороться с кешированием пустых 304 ответов,<br>
которые приходят с backend`а с "Cache-Control: public, max-age=1" ?</blockquote><div><br></div><div>кеширование 304 может быть только с пустым телом. такова природа этого ответа. </div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2) прокидывания клиентских if-none-match/if-not-modified-<u></u>since до бекенда<br>
</blockquote>
<br>
только это как раз будет способ создать проблему, а не решить ее.<br>
backend ответит 304 статусом и пустая страница попадет в кеш nginx.</blockquote><div><br></div><div><br></div><div>если бекенд ответит 304, то nginx тоже ответит 304. да, в этом случае тело ответа не нужно.</div><div><br>
</div><div>если бекенд понял, что контент поменялся, то ответ будет 200 и будет тело.</div><div><br></div><div>соответственно, когда тело нужно, оно есть. и наоборот. в чем проблема ?</div><div><br></div><div>я вижу проблему в сильном усложнении логики. без бутылки будет не разобраться. прежде чем выпускать таких демонов, надо сто раз подумать.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 06.01.2014 10:35, S.A.N wrote:<br>
</blockquote></blockquote>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Отключить Nginx кеширования тоже не можем потому что на других uri мы<br>
используем Nginx кеширования, например uri<br>
/news/list<br>
Отдает контент с заголовками<br>
Cache-Control: public, max-age=1<br>
Эта страница должна попадать в кеш Nginx.<br>
Имино с этой страницей и будут проблемы,<br>
если в папке кеша Nginx удалится файл кеша,<br>
и прийдет запрос от браузера с актуальным заголовками<br>
If-Modified-Since и If-None-Match, на этот запрос бекенд ответит 304<br>
статусом и вернет заговок Cache-Control: public, max-age=1,<br>
в результате чего 304 ответ попадет в кеш Nginx.<br>
</blockquote></blockquote></blockquote>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
304 ответ попадет в кеш nginx потому что Вы сами же включили<br>
кеш nginx и сами же разрешили nginx кешировать этот ответ,<br>
вернув заголовок Cache-Control: public, max-age=1<br>
который управляет одновеменно и клиентским кешем и кешем nginx.<br>
<br>
Добавьте к 304 ответам backend`а еще один заголовок X-Accel-Expires: 0<br>
который будет запрещать nginx кешировать такие ответы и будет вам счастье.<br>
<br>
Ваш backend обязан знать о том, что есть два различных кеша,<br>
если Вы хотите управлять ими по-разному. Иначе не получится.<br>
</blockquote></blockquote>
<br>
-- <br>
Best regards,<br>
 Gena<br>
<br>
______________________________<u></u>_________________<br>
nginx-ru mailing list<br>
<a>nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://mailman.nginx.org/<u></u>mailman/listinfo/nginx-ru</a></blockquote>