Welcome! Log In Create A New Profile

Advanced

Re: proxy_store tomcat

Maxim Dounin
August 05, 2020 09:48PM
Hello!

On Wed, Aug 05, 2020 at 06:07:43AM -0400, oradba25 wrote:

> Добрый день
>
> Долгое время работал сайт под управлением tomcat 7.0.75 с настройкой кеша
> под статику таким образом
>
> root /nginx/root/site;
> location ~ ^/tst/(css|custom|galleries|i|images)/ {
> expires 3h;
> proxy_cache_valid 200 3h;

Замечу, что директива "proxy_cache_valid" тут не делает ничего,
так как ни проксирования, ни тем более проксирования с
кэшированием в данном location'е нет.

> add_header "Cache-Control" "public";
> add_header "Cache-Control" "no-transform";
>
> try_files $uri @proxy_priv;
> }
>
> location @proxy_priv {
> internal;
> proxy_intercept_errors on;
> proxy_set_header "Accept-Encoding" "identity";
> proxy_store on;
> proxy_pass http://site_priv_http;
> }
>
>
> После очередного апгрейда приложения версия tomcat поменялась на 9.0.36
>
> И вся эта кухня перестала работать. Точнее, работает только первый раз!
>
> Потом тупо не возвращает например, тот же css -- идут ошибки HTTP 400 Bad
> Request
>
> Удаляешь файлики из /nginx/root/site (== root) все опять ОДИН раз
> отрабатывает, пока не закеширует снова

Кто возвращает ошибки? На какие запросы? Есть ли при этом
сохранённый файл у nginx'а для данного запроса? Что при этом в
access log'е и error log'е nginx'а?

> Есть подозрение, что мешает proxy_set_header "Accept-Encoding"
> "identity";
> Но тем же curl-ем тако заголовок отрабатывает вполне нормально

Я сомневаюсь, что дело в этом: если бы бэкенду не нравился
заголовок "Accept-Encoding: identity", то он бы всё время
возвращал ошибки, а не только после того, как что-то закэшируется.
Впрочем, в любом случае самое правильное, что тут можно сделать,
это убрать заголовок из запросов:

proxy_set_header Accept-Encoding "";

Так заголовок не будет передаваться на бэкенд, и соответственно
бэкенд должен будет возвращать несжатые ответы. Ну или просто
выключить сжатие на бэкенде и убрать вообще все манипуляции с
заголовком Accept-Encoding.

> С другими значениями (или без этого заголовка вообще) данные приходят в
> zip-виде, но браузер почему-то это не понимает и считает что они просто
> кривые

Это ожидаемо: вы используете proxy_store, который умеет сохранять
только тело ответа, и соответственно информация из заголовков,
указывающая, что ответ сжат, теряется. Браузеру в результате
неоткуда узнать, что ответ был сжат, и с его точки зрения он
получает мусор.

Если хочется, чтобы заголовки сохранялись и браузер мог прочитать
такой ответ - используйте proxy_cache. От необходимости отключать
сжатие и/или убирать Accept-Encoding, впрочем, это не избавит:
даже если бэкенд честно пришлёт "Vary: Accept-Encoding",
кэшерование будет неэффективным. С другой стороны, смысл
использования тут proxy_store от меня так или иначе ускользает: на
нём, конечно, можно построить много всего интересного, но он при
этом и ограничений налагает немало. В общем случае гораздо проще
использовать для кэширования proxy_cache.

--
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

proxy_store tomcat

oradba25 August 05, 2020 06:07AM

Re: proxy_store tomcat

Maxim Dounin August 05, 2020 09:48PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 141
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready