Нет uwsgi set header, чем заменить?

2014-07-15 Пенетрантность Budulianin
Всем привет.

Хочу задать заголовки. Но в доке не вижу 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, чем заменить?

2014-07-15 Пенетрантность Igor Sysoev
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, чем заменить?

2014-07-15 Пенетрантность Budulianin
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, чем заменить?

2014-07-15 Пенетрантность Валентин Бартенев
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

Помогите с редиректом

2014-07-15 Пенетрантность luckysrg
Всем привет, очень нужна помощь, сайт был полностью на 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, чем заменить?

2014-07-15 Пенетрантность Budulianin
Валентин Бартенев, 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, чем заменить?

2014-07-15 Пенетрантность Budulianin
Разобрался.

Нужно в каждой директиве прописывать заново 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, чем заменить?

2014-07-15 Пенетрантность Budulianin
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, чем заменить?

2014-07-15 Пенетрантность Валентин Бартенев
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, чем заменить?

2014-07-15 Пенетрантность Budulianin
Какой смысл добавлять заголовок в ответ 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.

2014-07-15 Пенетрантность Budulianin
Всем привет.

Правильно ли я понимаю, что 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, чем заменить?

2014-07-15 Пенетрантность S.A.N
Я хочу принять ответ от 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.

2014-07-15 Пенетрантность Budulianin
А как, вообще, правильнее создавать кэш 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, чем заменить?

2014-07-15 Пенетрантность S.A.N
Да, директивы 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, чем заменить?

2014-07-15 Пенетрантность Budulianin
Зачем вы выбрали такое значения 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, чем заменить?

2014-07-15 Пенетрантность S.A.N
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, чем заменить?

2014-07-15 Пенетрантность Budulianin
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, чем заменить?

2014-07-15 Пенетрантность S.A.N
Нет, на протяжении 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, чем заменить?

2014-07-15 Пенетрантность Budulianin
Большое спасибо за ответ, теперь понял.

А если браузер присылает в запросе 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: Помогите с редиректом

2014-07-15 Пенетрантность luckysrg
Спасибо за совет, но все равно остался вопрос как из секции 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, чем заменить?

2014-07-15 Пенетрантность Budulianin
В этом случаи приложения должно уметь очень быстро проверять
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, чем заменить?

2014-07-15 Пенетрантность S.A.N
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, чем заменить?

2014-07-15 Пенетрантность Budulianin
Нет, на протяжении 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, чем заменить?

2014-07-15 Пенетрантность Budulianin
Лично я разработчик а не администратор, ...
...
там и зарплаты другие и задачи интересней )

Такие решения не от меня зависят, я лишь могу предложить.

Эта схема защитит ваше приложения от нагрузки, но она никак не сможет
актуализировать кеш быстрей чем это указанно в 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, чем заменить?

2014-07-15 Пенетрантность S.A.N
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, чем заменить?

2014-07-15 Пенетрантность S.A.N
 Эта схема защитит ваше приложения от нагрузки, но она никак не сможет
 актуализировать кеш быстрей чем это указанно в 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, чем заменить?

2014-07-15 Пенетрантность S.A.N
 Значит моя схема вполне жизнеспособна и не выглядит нормально? Кладём
 основную нагрузку на 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, чем заменить?

2014-07-15 Пенетрантность S.A.N
 те кто обновляет страницу в ручную будут получать 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: Помогите с редиректом

2014-07-15 Пенетрантность luckysrg
Огромное спасибо, 
Это именно то, что мне было нужно !!!

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, чем заменить?

2014-07-15 Пенетрантность S.A.N
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, чем заменить?

2014-07-15 Пенетрантность Budulianin
Я имел виду, ревалидация В приложении это - 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, чем заменить?

2014-07-15 Пенетрантность S.A.N
 Я имел виду, ревалидация В приложении это - 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, чем заменить?

2014-07-15 Пенетрантность S.A.N
 С этого и надо было начинать, они нужны обязательно если вы хотите
 клиенту отдавать 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, чем заменить?

2014-07-15 Пенетрантность Budulianin
в общем это хороший стиль 
Ну сейчас все стараются следовать 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, чем заменить?

2014-07-15 Пенетрантность Gena Makhomed

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.

2014-07-15 Пенетрантность Budulianin
Правильно ли я понимаю, что 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, чем заменить?

2014-07-15 Пенетрантность Budulianin
Но все эти детали лучше не говорить тем кто только начинает изучать
механизмы кеширования в 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, чем заменить?

2014-07-15 Пенетрантность S.A.N
 Но все эти детали лучше не говорить тем кто только начинает изучать
 механизмы кеширования в 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.

2014-07-15 Пенетрантность Maxim Dounin
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: Помогите с редиректом

2014-07-15 Пенетрантность luckysrg
Подскажите можно ли в 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

2014-07-15 Пенетрантность Maxim Dounin
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

2014-07-15 Пенетрантность S.A.N
 Если я правильно понял этот поток текста, то на выходе вы хотите 
 получить что-то вроде 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

2014-07-15 Пенетрантность S.A.N
Наверно стоит объяснить почему логику кеширования мы вынесли на бекенд и
минимально используем конфиг 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