Нет uwsgi set header, чем заменить?
Всем привет. Хочу задать заголовки. Но в доке не вижу uwsgi_set_header. Как для uwsgi задать заголовки? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251763#msg-251763 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
On 15 Jul 2014, at 12:18, Budulianin nginx-fo...@nginx.us wrote: Всем привет. Хочу задать заголовки. Но в доке не вижу uwsgi_set_header. Как для uwsgi задать заголовки? http://nginx.org/en/docs/http/ngx_http_uwsgi_module.html#uwsgi_param -- Igor Sysoev http://nginx.com ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
http://stackoverflow.com/questions/14133460/how-to-read-uwsgi-parameters-in-python-flask-passed-from-nginx Вот здесь говорят, что можно создать переменную, как uwsgi параметр и пользоваться ей. А другого способа нет? Странно, что нет uwsgi_set_header. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251764#msg-251764 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
On Tuesday 15 July 2014 04:23:53 Budulianin wrote: http://stackoverflow.com/questions/14133460/how-to-read-uwsgi-parameters-in-python-flask-passed-from-nginx Вот здесь говорят, что можно создать переменную, как uwsgi параметр и пользоваться ей. А другого способа нет? Странно, что нет uwsgi_set_header. Потому, что в самом протоколе нет такого понятия как заголовок, а есть возможность только передавать параметры, и все http заголовки передаются как параметры с префиксом HTTP_. Если вы хотите эмулировать такой заголовок, то просто нужно указать: uwsgi_param HTTP_Header value; -- Валентин Бартенев ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Помогите с редиректом
Всем привет, очень нужна помощь, сайт был полностью на https, в связи с этим были характерные проблемы с поисковикми, не индексиравались картинки, нет favicon. Собственно, нужно теперь поставить 301 редирект на все страницы с https, но оставить редирект на https в личный кабинет и на страницу оплаты, с первой частью вопросов нет, но, вот, чтобы обе части выполняли условия не получается, прошу помощи. вот пациент server { server_name example.ru www.example.ru; listen 144.*.*.*; listen 144.*.*.*:443 ssl; disable_symlinks if_not_owner from=$root_path; set $root_path /var/www/example/data/www/example.ru; #rewrite ^(.*) https://$host$1 permanent; if ( $scheme = http ) { rewrite ^/(.*)$ https://$host/$1 permanent; } location ~* ^.+.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|woff)$ { root $root_path; expires 31d; access_log /var/www/nginx-logs/example isp; access_log /var/www/httpd-logs/example.ru.access.log ; error_page 404 = @fallback; } location / { proxy_pass http://144.*.*.*:81; proxy_redirect http://144.*.*.*:81/ /; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; } location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin)/ { proxy_pass http://144.*.*.*:81; proxy_redirect http://144.*.*.*:81/ /; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; } location @fallback { proxy_pass http://144.*.*.*:81; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; } location ^~ /webstat/ { auth_basic Restricted area; auth_basic_user_file /var/www/example/data/etc/665870.passwd; try_files $uri @fallback; } include /usr/local/ispmgr/etc/nginx.inc; ssl_certificate /var/www/httpd-cert/example/ssl-example.crt; ssl_certificate_key /var/www/httpd-cert/example/ssl-example.key; #ssl_protocols SSLv3 TLSv1; #Disables all weak ciphers #ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM; ssl_ciphers RC4:HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; } Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251769,251769#msg-251769 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Валентин Бартенев, Igor Sysoev Спасибо за ответы. А как правильно передать несоклько переменных в uwsgi ? До этого у меня передавалась стандартная переменная PATH_INFO, а теперь uwsgi говорит, что её нет. http { uwsgi_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=static_cache:10m inactive=10m max_size=500M; uwsgi_cache_use_stale error; include uwsgi_params; server { listen 6543; location / { uwsgi_pass unix:/tmp/test_cache_nginx.sock; uwsgi_cache static_cache; uwsgi_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie; uwsgi_hide_header Set-Cookie; uwsgi_param HTTP_CACHE_CONTROL max-age=600 no-cache; uwsgi_cache_key $request_method$host$uri$is_args$args; uwsgi_cache_lock on; } } } KeyError: 'PATH_INFO' Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251770#msg-251770 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Разобрался. Нужно в каждой директиве прописывать заново include uwsgi_params; Если передаёшь свои параметры в ней. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251771#msg-251771 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
proxy_set_header задаёт заголовки. uwsgi_param задаёт параметры. И всё это передаётся на проксируемый сервер. есть ещё uwsgi_pass_header он разрешает передавать запрещённые заголовки от uwsgi. Но я не вижу с помощью чего, можно добавить заголовки в ответ uwsgi. Это возможно? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251772#msg-251772 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
On Tuesday 15 July 2014 05:10:10 Budulianin wrote: proxy_set_header задаёт заголовки. uwsgi_param задаёт параметры. И всё это передаётся на проксируемый сервер. есть ещё uwsgi_pass_header он разрешает передавать запрещённые заголовки от uwsgi. Но я не вижу с помощью чего, можно добавить заголовки в ответ uwsgi. Это возможно? [..] Какой смысл добавлять заголовок в ответ uwsgi? Вероятно вы всё же хотите добавить заголовок в ответ nginx, тогда это делается с помощью add_header. http://nginx.org/r/add_header/ru -- Валентин Бартенев ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Какой смысл добавлять заголовок в ответ uwsgi? Вероятно вы всё же хотите добавить заголовок в ответ nginx, тогда это делается с помощью add_header. Возможно я неправильно выразился. Я хочу принять ответ от uwsgi, добавить в него пару заголовков и отдать клиенту. Фактически добавить заголовки в ответ nginx. Я таким образом хочу управлять кэшем. Спасибо, сейчас попробую. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251776#msg-251776 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Вопрос об управлении кэшем nginx.
Всем привет. Правильно ли я понимаю, что nginx может создать кэш, только на основании полученного ответа от проксируемого сервера? Т.е. прописаны все настройки для кэша(uwsgi_cache_path и прочее) Но nginx создаст кэш только, если будет соответствующий заголовок(Cache-Control, Expires) от проксируемого сервера. А создать кэш самостоятельно(без заголовков от прокс. сервера) он не может? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251781,251781#msg-251781 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Я хочу принять ответ от uwsgi, добавить в него пару заголовков и отдать клиенту. Фактически добавить заголовки в ответ nginx. Я таким образом хочу управлять кэшем. Вы таким образом сможете управлять только кешем браузера, если хотите управлять кешем Nginx, нужно чтобы ваше приложения отдавала правильные значения в заголовках Expires или Cache-Control, если приложения не может отдавать правильные заголовки тогда вам нужно управлять кешированием через директивы в конфиге Nginx http://nginx.org/ru/docs/http/ngx_http_uwsgi_module.html#uwsgi_cache_valid вам наверно нужно так - uwsgi_cache_valid 200 10m; P.S. Зачем вы выбрали такое значения Cache-Control: max-age=600 no-cache? во первых, нужна запятая между max-age=600 и no-cache во вторых, max-age=600 и no-cache взаимоисключают дру-друга, max-age=600 говорит кешить на 10 минут, а no-cache говорит нельзя использовать кеш без ревалидации, т.е браузер это понимает как - max-age=0 Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251782#msg-251782 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Вопрос об управлении кэшем nginx.
А как, вообще, правильнее создавать кэш nginx ? Преимущественно на основе заголовков от приложения? Или подменивать заголовки на nginx ? Или всё зависит от задачи, но лучше стараться управлять из приложения? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251781,251786#msg-251786 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Да, директивы uwsgi_cache_valid для этого и придумали, чтобы управлять кешированием, если бекенд приложения не может самостоятельно отправить правильные заголовки. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251788#msg-251788 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Зачем вы выбрали такое значения Cache-Control: max-age=600 no-cache? Этой строчкой я хотел сказать браузеру: держи у себя кэш 600 секунд, но при каждом запросе отправляй заголовки(видимо If-modified-since) Потому что кэш nginx может обновиться раньше, чем пройдёт 600 секунд и тогда браузер возьмёт свежий ответ. Неверно ? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251794#msg-251794 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Budulianin Wrote: --- Зачем вы выбрали такое значения Cache-Control: max-age=600 no-cache? Этой строчкой я хотел сказать браузеру: держи у себя кэш 600 секунд, но при каждом запросе отправляй заголовки(видимо If-modified-since) Потому что кэш nginx может обновиться раньше, чем пройдёт 600 секунд и тогда браузер возьмёт свежий ответ. Неверно ? Нет не верно, параметр max-age указывает через какой временной интервал времени нужно проводить ревалидацию, no-cache тоже указывает этот интервал, он всегда равен нулю т.е по сути no-cache это синоним max-age=0. Браузеру ненужно говорить сколько времени хранить кеш, он его будет хранить столько сколько сможет по своим внутренним алгоритмам, кол-во свободного места на диске, частота обращения к сайту и т.д... Браузеру просто нужно сказать, когда проводить ревалидацию кеша, вот и все. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251795#msg-251795 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
S.A.N Значит, если в ответе у сервера было Cache-Control max-age=600, в течение 600 секунд, каждый запрос браузера, будет отсылать валидатор(If-modifiet-since или If-non-match) и если валидатор в кэше(nginx) такой же, то будут возвращены только заголовки(304), а спустя 600 секунд, будет просто запрос без валидаторов и тогда уже в любом случае ответ будет с телом(200 ок) вне зависимости, новый там кэш или старый? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251796#msg-251796 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Нет, на протяжении 600 секунд, браузер НЕ БУДЕТ делать запрос к серверу вообще, потому что вы ему сказали, что кеш можно использовать без ревалидации на протяжении 600 секунд. После истечения 600 секунд, браузер сделает запрос к серверу, передаст ему If-Modified-Since, Nginx сравнит значения If-Modified-Since с значением Last-Modified которое хранится в кеше, если они равны Nginx ответит статусом 304 и передавать ничего не будет, браузер при получения статуса 304 понимает что контент не изменился и продолжает использовать свой кеш на протяжении следующих 600 секунд, и так по кругу, если If-Modified-Since и Last-Modified из кеша не равны, Nginx ответит 200 статусом и отдаст новый контент. Если вы можете, в адреса статики добавлять номер версии, тогда можно реализовать самую простую и надежную схему, отдавать кеш с max-age=31536, но при изменении файлв статики, менять её адрес (в адресе ставится номер версии статики) в самой странице HTML, таким образом вы получите максимальное кеширования и мгновенное обновления кеша. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251800#msg-251800 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Большое спасибо за ответ, теперь понял. А если браузер присылает в запросе Cache-Control: no-cache(или max-age=0), что часто бывает, а я хочу отдавать кэш, мне как-то игнорировать этот заголовок или если из приложения будет ответ с Cache-Control: max-age=600, то в браузере в любом случае сохранится кэш? Получается, что Cache-Control: max-age=31536 опасно отдавать, если не уверен на 100% что ничего не будет меняться. Как потом отменить этот кэш? Если не менять URI. Добавлять версию скорее всего не получится, значит нужно задавать небольшой max-age даже для статики? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251801#msg-251801 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Помогите с редиректом
Спасибо за совет, но все равно остался вопрос как из секции 80 сделать редирект на страницы корзины и личного кабинета, а из секции 443 все редиректить на http, кроме страниц корзины и личного кабинета. Спасибо. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251769,251803#msg-251803 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
В этом случаи приложения должно уметь очень быстро проверять If-Modified-Since с текущим Last-Modified, если они равны отдавать 304, если нет отдавать новый контент и статус 200. Под это нужно специально готовить приложение. Обычно приходит GET и отдаётся 200. А если сделать так: отдавать в кэш браузера, на очень короткий срок динамические страницы(3-5 мин), статику(JS, CSS, img) на пару часов. А кэш самого nginx хранить дольше: динамические страницы(20-30 минут) статику несколько суток. Тогда если вдруг понадобится быстро поменять что-то, то мы всегда сможем почистить кэш nginx. Таким образом, и браузерный кэш нам помогает, и nginx на себя принимает основную нагрузку, и мы в любой момент, в очень короткий срок, можем сделать весь контент у всех пользователей, опять актуальным. Как идея? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251805#msg-251805 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Budulianin Wrote: --- В этом случаи приложения должно уметь очень быстро проверять If-Modified-Since с текущим Last-Modified, если они равны отдавать 304, если нет отдавать новый контент и статус 200. Под это нужно специально готовить приложение. Обычно приходит GET и отдаётся 200. Лично я разработчик а не администратор, и я бы больше был мотивирован в доработке приложения, вместо решения этой задачи на уровне админисрирования веб-сервера. P.S. Чем быстрей вы займетесь разработкой приложения, тем быстрей вы из Junior вырастите в Senior разработчика, там и зарплаты другие и задачи интересней ) А если сделать так: отдавать в кэш браузера, на очень короткий срок динамические страницы(3-5 мин), статику(JS, CSS, img) на пару часов. А кэш самого nginx хранить дольше: динамические страницы(20-30 минут) статику несколько суток. Тогда если вдруг понадобится быстро поменять что-то, то мы всегда сможем почистить кэш nginx. Таким образом, и браузерный кэш нам помогает, и nginx на себя принимает основную нагрузку, и мы в любой момент, в очень короткий срок, можем сделать весь контент у всех пользователей, опять актуальным. Как идея? Вы знаете как определяется скорость каравана? Она равна скорости самого медленного звена каравана. В вашей схеме кеш контента будет валидным столько сколько вы указали Nginx и не важно что браузеры будут делать запрос чаще, Nginx будет отдавать им контент из кеша и не обращаться к вашему приложению, логика кеширования в Nginx такая же как в браузерах, я уже вам объяснял что значит max-age, для Nginx он означает тоже самое - это кол-во секунд на протяжении которых Nginx будет отдавать конент из кеша и не обращаться к вашему приложению. Эта схема защитит ваше приложения от нагрузки, но она никак не сможет актуализировать кеш быстрей чем это указанно в max-age. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251806#msg-251806 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Нет, на протяжении 600 секунд, браузер НЕ БУДЕТ делать запрос к серверу вообще, потому что вы ему сказали, что кеш можно использовать без ревалидации на протяжении 600 секунд. А у меня запросы идут к nginx, те браузерный кэш не используется. первый запрос, все кэши чистые: Request: Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding:gzip,deflate,sdch Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 Connection:keep-alive Host:localhost:6543 User-Agent:Mozilla/5.0 Response: Cache-Control:max-age=600 Connection:keep-alive Content-Length:15 Content-Type:text/html; charset=UTF-8 Date:Tue, 15 Jul 2014 14:24:14 GMT Server:nginx/1.7.3 Второй ответ-запрос такой же. В логах nginx видно, что он оба запроса принял. Тк кэш у nginx был, к uwsgi он не прошёл. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251809#msg-251809 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Лично я разработчик а не администратор, ... ... там и зарплаты другие и задачи интересней ) Такие решения не от меня зависят, я лишь могу предложить. Эта схема защитит ваше приложения от нагрузки, но она никак не сможет актуализировать кеш быстрей чем это указанно в max-age. Я же сказал, что мы можем чистить кэш nginx когда нам это нужно. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251810#msg-251810 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Budulianin Wrote: --- Нет, на протяжении 600 секунд, браузер НЕ БУДЕТ делать запрос к серверу вообще, потому что вы ему сказали, что кеш можно использовать без ревалидации на протяжении 600 секунд. А у меня запросы идут к nginx, те браузерный кэш не используется. Конечно запросы к Nginx пойдут, если вы нажимаете F5, вы заставляете браузер делать запрос, это нормальное поведения браузера, так и должно быть. Вам нужно по другому тестировать, не обновляйте страницу в ручную, просто ходите по HTML страницам в которых прописаны src к вашей статике, в этом случаи браузер не будет делать запросы к статике, а будет их брать из кеша на протяжении 600 сек. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251811#msg-251811 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Эта схема защитит ваше приложения от нагрузки, но она никак не сможет актуализировать кеш быстрей чем это указанно в max-age. Я же сказал, что мы можем чистить кэш nginx когда нам это нужно. Если у вас есть сторонний процесс который чистит кеш, тогда конечно можно использовать эту схему. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251812#msg-251812 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Значит моя схема вполне жизнеспособна и не выглядит нормально? Кладём основную нагрузку на nginx и немного на браузер. Я думаю да, но лучше проконсультироватся у разработчиков Nginx, как реагирует Nginx если кеш файлы исчезают, без его ведома, я думаю он нормально реагирует, но мало ли какие там могут быть ньюансы. Чтобы пилить приложение, на это нужны время-деньги, а настроить nginx быстро, дёшево и практично. Это понятно, ревалидировать кеш на в приложении - это стиль RestFull приложений, это очень правильный подход и на самом деле не сложный в разработке и его можно выполнять довольно быстро. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251818#msg-251818 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
те кто обновляет страницу в ручную будут получать 304 статус без контента, Только если в запросе, который должен закэшироваться, был заголовок-валидатор(ETag, Last-Modified) иначе нечего будет сравнивать. У меня сейчас нет их и nginx отдаёт 200. С этого и надо было начинать, они нужны обязательно если вы хотите клиенту отдавать 304 без контента. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251819#msg-251819 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Помогите с редиректом
Огромное спасибо, Это именно то, что мне было нужно !!! Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251769,251820#msg-251820 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Budulianin Wrote: --- Это понятно, ревалидировать кеш на в приложении - это стиль RestFull приложений, НЕ в приложении? Я имел виду, ревалидация В приложении это - RESTful стиль. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251822#msg-251822 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Я имел виду, ревалидация В приложении это - RESTful стиль. Не знал, насколько я знаю, обычно REST преподносят, как набор методов(действий), которые можно выполнить с объектом и путь к этому объекту. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251823#msg-251823 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Я имел виду, ревалидация В приложении это - RESTful стиль. Не знал, насколько я знаю, обычно REST преподносят, как набор методов(действий), которые можно выполнить с объектом и путь к этому объекту. Да, но не только, основная идея в том, что клиент и сервер могут полностью описать своё состояния на уровне HTTP заголовков, в общем это хороший стиль который позволит другим приложениям (например Nginx) общаться с вашим приложением на уровне HTTP заголовков. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251825#msg-251825 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
С этого и надо было начинать, они нужны обязательно если вы хотите клиенту отдавать 304 без контента. А можно ли создавать ETag и Last-Modified на стороне nginx и для статики и для динамики? есть директива etag on; но написано что она только для статики автоматом вычисляет его. Можно наверно использовать (Модуль ngx_http_ssi_module поддерживает две встроенные переменные) $date_gmt текущее время в GMT. Формат задаётся командой config с параметром timefmt. Для Last-Modified Возможно можно, точно не знаю, у меня не было потребности это создавать в Nginx на лету. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251826#msg-251826 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
в общем это хороший стиль Ну сейчас все стараются следовать REST. А вот про учёт ревалидации не знал, спасибо, запомню. Обычно GET POST PUT PATCH DELETE, больше пока ничего не видел. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251827#msg-251827 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
On 15.07.2014 17:29, S.A.N wrote: В вашей схеме кеш контента будет валидным столько сколько вы указали Nginx и не важно что браузеры будут делать запрос чаще, Nginx будет отдавать им контент из кеша и не обращаться к вашему приложению, логика кеширования в Nginx такая же как в браузерах, я уже вам объяснял что значит max-age, для Nginx он означает тоже самое - это кол-во секунд на протяжении которых Nginx будет отдавать конент из кеша и не обращаться к вашему приложению. логика кеширования в Nginx такая же как в браузерах, - есть и отличия: http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_cache_bypass если выполняется условие fastcgi_cache_bypass и не выполняется условие fastcgi_no_cache - то это и будет out-of-order обновление кеша. -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Задавать Last-modified на стороне nginx.
Правильно ли я понимаю, что Last-modified нельзя задать, через nginx, для ответа, который nginx кэширует? Можно задавать через add_header Last-Modified $date_gmt; Но тогда теряется смысл этого заголовка, потому что при каждом обращении к nginx, в заголовке будет новое значение. Соответственно If-Modified-Since никогда не совпадёт с этим значением и 304 не отправят на клиент. У статического контента всё просто, Last-modified это дата последнего изменения. А вот как задать на стороне nginx Last-modified для ответа полученного на основе динамической страницы, чтобы он осел в кэше и не изменялся пока не будет очередного запроса к бекенду? Если посылать Last-modified с бекенда, то тогда всё норм, он появится в кэше nginx и пока он там, проверка If-Modified-Since будет работать и будет возвращаться 304. Но это в случае когда Last-modified задаёт бекенд, а как задать через nginx? Это реально? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251834,251834#msg-251834 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Но все эти детали лучше не говорить тем кто только начинает изучать механизмы кеширования в Nginx ) Почему? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251835#msg-251835 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Нет uwsgi set header, чем заменить?
Но все эти детали лучше не говорить тем кто только начинает изучать механизмы кеширования в Nginx ) Почему? Чтобы не пугать, раньше времени ) Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251763,251837#msg-251837 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Задавать Last-modified на стороне nginx.
Hello! On Tue, Jul 15, 2014 at 02:23:19PM -0400, Budulianin wrote: Правильно ли я понимаю, что Last-modified нельзя задать, через nginx, для ответа, который nginx кэширует? Можно задавать через add_header Last-Modified $date_gmt; Но тогда теряется смысл этого заголовка, потому что при каждом обращении к nginx, в заголовке будет новое значение. Соответственно If-Modified-Since никогда не совпадёт с этим значением и 304 не отправят на клиент. У статического контента всё просто, Last-modified это дата последнего изменения. А вот как задать на стороне nginx Last-modified для ответа полученного на основе динамической страницы, чтобы он осел в кэше и не изменялся пока не будет очередного запроса к бекенду? Если посылать Last-modified с бекенда, то тогда всё норм, он появится в кэше nginx и пока он там, проверка If-Modified-Since будет работать и будет возвращаться 304. Но это в случае когда Last-modified задаёт бекенд, а как задать через nginx? Это реально? Вообще такие вещи должен делать бекенд. Если он не умеет и нет возможности его исправить - в качестве костыля можно за кеширующим nginx'ом поставить ещё один (достаточно виртуального сервера в рамках того же nginx'а), сделав двойное проксирование, и добавлять заголовок Last-Modified там, с помощью add_header. Тогда в кеш будет попадать ответ уже с Last-Modified, и запросы с If-Modified-Since будут работать и возвращать 304, пока соответствующий ответ в кеше. -- Maxim Dounin http://nginx.org/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Помогите с редиректом
Подскажите можно ли в location добавить AJAX и JSON запросы, что-бы они не редиректились? и если можно, то как? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251769,251846#msg-251846 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Cache revalidation using If-None-Match
Hello! On Mon, Jul 14, 2014 at 11:37:21PM -0400, S.A.N wrote: Nginx 1.7.3, отличная версия, в ней полностью решен вопрос с ETag. Но есть мелочи которых очень не хватает, их всего две ) 1. Нельзя получить от клиента валидаторы (“If-Modified-Since” и “If-None-Match”) если файла кеша нет, эта ситуация возникает когда бекенд отдавал заголовки Cache-Control: private, для контента который должен кешироватся только в браузере (не публичный кеш). Проблема решается если в конфиге прописать fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match if_not_empty; fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since if_not_empty; Но тогда будет проблема с публичным кешем, потому что бекенд может получить валидаторы от браузера, ответить статусом 304, Cache-Control: public... и Nginx положит этот ответ (статусом 304 nobody) в файл своего кеша и будет его отдавать всем. Я уже писал, про эту проблему http://forum.nginx.org/read.php?21,245951,245951#msg-245951 Хочется её как-то решить. Самое простое решение этой проблемы - не включать кешироване там, где оно не нужно. 2. Нельзя переопределить через HTTP заголовки значения директивы fastcgi_cache_use_stale и установить для кеширования max-age=0 Для чего это нужно, в конфиге прописывается директива fastcgi_cache_use_stale error, это значения нужно для 80% uri. Но есть динамические страницы, которые нужно кешировать, но обязательно проводить ревалидацию на каждый запрос. Пример из жизни где мы это юзаем. Есть страница отчетов с графиками различной статистики, которая может меняться раз в сутки или каждую секунду, заранее это не известно. Доступ к этим отчетам имеют только залогиненые пользователи из определенных групп. Кол-во этих юзеров довольно высоко и количество запросов к этим отчетам так же высоко, по этому есть смысл их кешировать, но отдавать только после проведения проверка на вхождения юзара в нужную групу и на актуальность валидаторов (ETag). Есть способ как создать кеш с max-age=0, через X-Accel-Expires: $time-1. Но нет способа как динамически, сказать Nginx не использовать cache_use_stale для этого uri, прописать в конфиге все варианты этих uri сложно они динамические и не шаблонные, добавлять какой-то спец признак по которому можно создать общий location в принципе можно, но хочется более красивого и системного решения. На мой взгляд таким решением может стать Cache-Control: must-revalidate, если бекенд отдает этот заголовок, он сохраняется в кеш, но при повторном использовании кеша, Nginx всегда выполняет ревалидацию (must-revalidate), если бекенд не работает отдать клиенту статус ошибки. Это конечно будет иметь определенный оверхед, но такой кеш намного эффективней, чем каждый раз повторно генерировать отчет и все графики. Если я правильно понял этот поток текста, то на выходе вы хотите получить что-то вроде The stale-if-error Cache-Control Extension, http://tools.ietf.org/html/rfc5861#section-4. Т.е. возможность задать в заголовках ответа - можно ли этот ответ в дальнейшем использовать при ошибках. (Планов по реализации соответствующего расширения - по крайней мере в ближайшем будущем - нет.) IMHO, простейшее и наиболее правильное решение - опять же, разделить сайт на location'ы и задать для каждого locatin'а нужные настройки. А если у вас соответствующие ресурсы нельзя нормально отделить друг от друга - это повод задуматься о структуре сайта. -- Maxim Dounin http://nginx.org/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Cache revalidation using If-None-Match
Если я правильно понял этот поток текста, то на выходе вы хотите получить что-то вроде The stale-if-error Cache-Control Extension, http://tools.ietf.org/html/rfc5861#section-4. Т.е. возможность задать в заголовках ответа - можно ли этот ответ в дальнейшем использовать при ошибках. Да, это очень похоже на то что нам надо. Задача заключается в том, чтобы найти подходящие HTTP заголовки, которые будут переопределять значения таких директив как: fastcgi_cache_lock fastcgi_cache_lock_timeout fastcgi_cache_use_stale Cache-Control: stale-while-revalidate=0 Этот заголовок можно использовать, чтобы включать и отключать директиву cache_lock и настраивать cache_lock_timeout. Если значения stale-while-revalidate равно 0, то для Nginx это должно означать cache_lock off. Если значения stale-while-revalidate положительное это должно означать cache_lock on. Само значения stale-while-revalidate, можно использовать как cache_lock_timeout. Cache-Control: stale-if-error=0 Этот заголовок можно использовать, чтобы отключать директиву cache_use_stale Если значения stale-if-error равно 0, то для Nginx это должно означать cache_use_stale off. (Планов по реализации соответствующего расширения - по крайней мере в ближайшем будущем - нет.) Это не срочные работы. Они будут очень полезны для тех кто хочет управлять кешированием через бекенд, а не програмить в конфигах Nginx. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251189,251849#msg-251849 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Cache revalidation using If-None-Match
Наверно стоит объяснить почему логику кеширования мы вынесли на бекенд и минимально используем конфиг Nginx. Нашим бекендом, пользуются не только браузеры но и мобил приложения, у них логика кеширования очень продвинутая, там учитывается временное пропадания online, в этом случаи клиентское приложения использует свой локал кеш. Бекенд должен указывать какой кеш можно использовать в ofline какой нет. Так же у нас на разных серверах работают PHPD (daemon), в будущем планируется общения между демонами внутри дата центра, напрямую без Nginx. Скорей всего это будет cURL и по этому бекенд должен уметь сам отвечать за HTTP кеширования а не рассчитывать на Nginx конфиг. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,251189,251850#msg-251850 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru