Re: nginx открывает не ту директорию

2020-02-07 Пенетрантность Ekaterina Kukushkina
Добрый день.

> On 5 Feb 2020, at 11:41, artesah  wrote:
> 
> Доброго времени суток, Господа. 
> Ситуация следующая, после обновления сервера веб сервер начал направлять не
> в ту директорию.
> Лог:
> 2020/02/05 11:28:23 [error] 2329#2329: *7 open()
> "/usr/share/nginx/html/zabbix.php" failed (2: No such file or directory),
> client: мой ip1, server: localhost, request: "GET /zabbix.php HTTP/1.1",
> host: "хост"
> 
> В то время как директория сайта находиться на /usr/share/zabbix
> В конфиге /etc/nginx/conf.d/zabbix.conf прописан set $webroot
> '/usr/share/zabbix';
> А в основном /etc/nginx/nginx.conf записан  include
> /etc/nginx/conf.d/zabbix.conf;
> 
> В чем может быть проблема?

Скорее всего при обновлении приехал /etc/nginx/conf.d/default.conf
Лучше закомментировать его содержимое, а не удалять весь файл.
Иначе он будет опять приезжать при каждом апдейте nginx.


> Заранее спасибо
> 
> Posted at Nginx Forum: 
> https://forum.nginx.org/read.php?21,286943,286943#msg-286943
> 
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru

--
Ekaterina Kukushkina
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: proxy_next_upstream & HTTP 502

2019-05-13 Пенетрантность Ekaterina Kukushkina
Добрый день, 

> On 12 May 2019, at 10:28, rihad  wrote:
> 
> У нас стоит:
> proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
> 
> Иногда в случае если один из апстримов в дауне в access.log появляются
> подобные строчки:
> 
> 
> 10.10.10.10 - S387DE34EI-1557637722 [12/May/2019:05:08:42 +] "GET
> /blah/blah HTTP/1.1" 502 12001 "-" "- example.com" "-"
> 
> nginx логирует запрос только если попробовал все апстримы, или после
> каждого? Здесь больше похоже на второе. Можно ли как-то настроить чтобы
> логировался только результат последнего попробованного апстрима? Он и будет
> результатом запроса.
> 

В большинстве случаев, в access лог логгируется один раз на клиентский
запрос независимо от того, сколько апстримов потрогано.
Несколько записей может быть, если nginx делает подзапросы (ssi, njs, etc)
и log_subrequest установлен в on. Либо при использовании нескольких
уровней проксирований на nginx. Полагаю, что это не ваш случай.

В access log имеет логгировать следующие переменные:
$status - итоговый ответ клиету (есть в дефолных форматах)
$upstream_addr - все потрогранные апстримы
$upstream_status - статусы потроганных апстримов

http://nginx.org/en/docs/http/ngx_http_upstream_module.html#variables

--
Ekaterina Kukushkina
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Как ускорить переключение апстримов?

2017-09-23 Пенетрантность Ekaterina Kukushkina
Добрый день.

> On 22 Sep 2017, at 15:02, Eugene Chaykin <eugene.chay...@i-a-t.net> wrote:
> 
> Стоит выключить один из них и скорость резко падает, примерно до минуты.
> 
> Пробовал прописывать max_fails=1 fail_timeout=30s, но особого эффекта не 
> ощутил.
> Если в конфиге к отключенному апстриму дописать down, то всё снова работает 
> быстро.
> 
> Вопрос: ЧЯДНТ и как добиться нормального фэйловера?

fail_timeout влияет на то, как долго сервер будет считаться недоступным после
фейла. А max_fails=1 так и вовсе дефолтное значение.
А для того, чтобы ускорить переключение, нужно крутить proxy_*_timeout
директивы. По умолчанию все они выставлены в 60 секунд. 

http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_connect_timeout
http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_read_timeout
http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_send_timeout

> 
> --
> С уважением,
> Евгений
> 

--
Ekaterina Kukushkina
NGINX, Inc.

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: proxy_*_timeout меньше секунды

2016-03-14 Пенетрантность Ekaterina Kukushkina
Привет.

Да, конечно.
http://nginx.org/ru/docs/syntax.html

> On 14 Mar 2016, at 22:12, ZZZ <karamb...@ukr.net> wrote:
> 
> Привет всем.
> 
> Возможно ли установить proxy_read_timeout, proxy_send_timeout, 
> proxy_connect_timeout меньше секунды ?

--
Ekaterina Kukushkina
Support Engineer | NGINX, Inc.

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: geoip_isp

2016-02-24 Пенетрантность Ekaterina Kukushkina
Здравствуйте.

> On 24 Feb 2016, at 12:45, madman <nginx-fo...@forum.nginx.org> wrote:
> 
> А в текущем модуле geoip нет поддержки isp базы, только org?

Есть. Обе базы поддерживаются через geoip_org

> 
> Нашел трид https://forum.nginx.org/read.php?21,188488,196961, но в текущем
> модуле дерективы geoip_isp нет.
> 
> А отличия между базами все же есть
> https://dev.maxmind.com/faq/what-is-the-difference-between-the-geoip-isp-and-organization-databases/

Отличия баз в содержимом полей (либо провайдер, либо название организации),
но никак не в структуре

> 
> Как сейчас можно использовать geoip_isp в nginx?

Подключить ISP базу через 'geoip_org /path/to/isp.file;' и получать
провайдера через $geoip_org

--
wbr, Ekaterina Kukushkina

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: geo2nginx.pl

2016-02-02 Пенетрантность Ekaterina Kukushkina
Здравствуйте, Михаил. 

Боже, это скрипт 10-ти летней давности, для того, чтобы впихнуть MaxMind 
в geo модуль.

Давно уже есть geoip модуль, который и надо использовать для таких целей
http://nginx.org/en/docs/http/ngx_http_geoip_module.html

Он полностью совместим с Legacy форматом MaxMind.

> On 02 Feb 2016, at 22:03, Михаил Монашёв <postmas...@softsearch.ru> wrote:
> 
> Не встречали, а он есть! :-)
> https://trac.nginx.org/nginx/browser/nginx/contrib/geo2nginx.pl
> 

--
Ekaterina Kukushkina
NGINX, Inc.

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Кэширование статики

2015-10-28 Пенетрантность Ekaterina Kukushkina
Здравствуйте.

Для начала имеет смысл добавить в конфигурацию log_format переменную
$upstream_cache_status и убедиться, что кэширования файлов действительно
не происходит или происходит не так, как ожидается.

Также имеет смысл удалить переменны $http_if_modified_since и 
$http_if_none_match из ключа кэширования. Потому что запросы от разных
клиентов, имеющих у себя разные версии файлов, будут приводить к тому,
что на один файл будет создаваться несколько закэшированных версий, т.е.
бэкэнд будет дергаться значительно большее количество раз. Чтобы в этом
убедиться, можно добавить и эти переменные к log_format посмотреть, как 
кэшируются запросы к одному url.

> On 27 Oct 2015, at 20:13, vitcool <nginx-fo...@nginx.us> wrote:
> 
> Доброго всем времени суток
> 
> имеем nginx-1.9.5 запущенный на Windows Server 2012 R2
> плюс RAM диск на 512Mb
> 
> nginx должен кэшировать статик файлы при получении ответа 200 на срок 60
> минут
> но судя по бекенду этого не происходит, но и нет 100% нагрузки на статику.
> причем файлы js и css почему то чаще ретривятся прокси nginx чем файлы
> картинок (gif, png, jpg)
> диск на котором расположен кэш заполнен на 50%
> подскажите пожалуйста в чем причина?
> 
> 
> конфиг (кусочек)
[...]
>   proxy_cache_key
> "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";
[...]
> 
> Posted at Nginx Forum: 
> https://forum.nginx.org/read.php?21,262499,262499#msg-262499
> 

--
Ekaterina Kukushkina
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Отдача статики

2015-10-22 Пенетрантность Ekaterina Kukushkina
Добрый день.

proxy_cache же.
https://www.nginx.com/resources/admin-guide/content-caching/

> On 22 Oct 2015, at 16:10, vitcool <nginx-fo...@nginx.us> wrote:
> 
> Есть ли элегантное решение при использовании nginx как прокси + для отдачи
> статики, для случая если фронтенд это отдельная машина ?
> 
> Понятно что если хранить статику на сервере фронтенда, то проблемы нет, 
> но то это означает что придется дорабатывать бекенд (который на отдельной
> машине) так чтобы 
> контент редакторы могли управлять статикой (картинки и документы) на внешнем
> сервере фронтенда.
> 
> Может существуют какие либо элегантные решения?
> 
> Posted at Nginx Forum: 
> https://forum.nginx.org/read.php?21,262402,262402#msg-262402
> 
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru

--
Ekaterina Kukushkina
Support Engineer | NGINX, Inc.

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Как сделать два вложенных условия в map или if

2015-10-05 Пенетрантность Ekaterina Kukushkina
Добрый день.

А можно еще раз? А то непонятно. То "для 2 стран сделать на https с 
обязательным редиректом", то "надо заредиректить всех кто не 2".

А если отлвечься от непонятного описания, то такие условные мапы можно делать 
двумя способами.

1) с использованием регулярных выражений. Частично похоже на обработку 
регулярных выражений в локейшенах - сначала проверяется полное соответствие 
строковых значений, если ничего не совпало - проверяются регулярные выражения 
до первого совпадения.
В данном примере, если схема - https, а код RU или UA, то $redirect_var будет 
равно "0", для всех остальных https значение будет "1"

map "$scheme:$geoip_country_code" $redirect_var {
https:RU 0;
https:UA 0;
~https:   1;
}

2) без использования регулярных выражений (ищется полное соответствие 
независимо от его расположения в map)

map $scheme $redirect_var {
https   $check_country;
}
map $geoip_country_code $check_country {
RU  0;
UA  0;
default 1; 
}

А дальше уже можно писать if ($redirect_var) { ...; }. Это условие будет 
срабатывать в том случае, если перменная $redirect_var существует и не равна 
нулю.
Т.е.
для http - эта переменная не определена, поэтому условие на выполняется
для https (RU|UA) - эта переменная равна "0", поэтому условие не выполняется
остальные https - эта перменная равно "1", условие выполнится.

> On 05 Oct 2015, at 14:40, Anton Kuznetsov <ma...@arjlover.net> wrote:
> 
> Добрый день!
> 
> Есть server {} общий для http & https
> 
> Появилась необходимость для 2 стран сделать его только на https с 
> обязательным редиректом. Но всех остальных так же обязательно оставить на 
> http. Так не хочется дублировать этот server {} длинный. А сделать редиректы 
> внутри одного - истина где-то рядом, но никак не дотянуться...
> Попытался сделать как в лучших домах:
> 
> http{
> map "$scheme:$geoip_country_code" $tossl {
> "https:RU" "1";
> "https:UA" "1";
> "http:RU" "2";
> "http:UA" "2";
> }}
> 
> server{}
> if ($tossl = "1") {rewrite ^(.*)$ https://example.com$1 permanent;}
> 
> Но вот второе правило должно работать от обратного. Надо заредиректить всех 
> кто не "2", но внутри одного server{} это так же будет и 1. А как в map 
> пометить все страны кроме этих двух, но с учетом схемы? Нужна снова 
> последовательная вложенность if.
> 
> Есть известный костыль:
> 
>   if ( $geoip_country_code !~ "RU|UA") { set $lock1 1; }
>   if ( $scheme = "https" ) { set $lock2 1; }
>   set $lock3 "$lock1$lock2";
>   if ( $lock3 = "11" ) { rewrite ^/(.*)$ http://example.com/$1 last ; }
> 
> Но он такой уродский... 
> 
> -- 
> Best regards,
> Anton Kuznetsov.  
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru

--
Ekaterina Kukushkina
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Редирект на выбранный порт

2015-09-29 Пенетрантность Ekaterina Kukushkina
Привет!

У вас в конфигурации четко сказано:
location /iweb/ {
...
deny all;
}

Никаких разрешающих правил я не вижу. При таком раскладе у 
nginx'а нет выбора и он обязан отдавать 403. Предположу что 
раньше были allow записи.

> On 29 Sep 2015, at 12:14, OZzzy <nginx-fo...@nginx.us> wrote:
> 
> Прошло 2 года , а я наступаю на те же грабли.
> не могу никак сделать редирект с порта 8080 на порт 44410
> 
> тот же конфиг что и был:
> 
> server {
> listen 95.65.37.90:44410;
> 
> location ~
> /\.(ht|svn|cvs|hg|txt|log|class|cgi|xml|conf|config|properties|jar) {
> deny all;
> }
> 
> location /iweb/ {
> proxy_pass http://localhost:8080;
> proxy_redirect http://localhost:8080/ http://95.65.37.90:44410/;
> proxy_set_header Host $host;
> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
> proxy_set_header X-Real-IP $remote_addr;
> access_log /var/log/iweb/admin_access.log;
> error_log /var/log/iweb/admin_error.log notice;
> 
> deny all;
> }
> }
> 
> 
> получаю ошибку 403 nginx
> 
> Posted at Nginx Forum: 
> http://forum.nginx.org/read.php?21,234597,261914#msg-261914
> 
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru

--
Ekaterina Kukushkina
NGINX, Inc.

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Добавление заголовка после upstream

2015-07-29 Пенетрантность Ekaterina Kukushkina
On Wed, Jul 29, 2015 at 05:56:40AM -0400, Budulianin wrote:
 Т.е. в блоке в котором выполняется proxy_pass на запрос повлиять можно, а в
 блоке upstream уже нет?

Именно так.

 
 http://forum.nginx.org/read.php?21,260591,260611#msg-260611

Скажите, пожалуйста, а какое поведение ожидается от nginx в случае 
недоступности одной из нод? Должны ли запросы, ранее маршрутизируемые на 
нее, быть переданы другой ноде (на время или постоянно), либо допустимо
ответить клиенту, что Сервис временно недоступен?

-- 
Ekaterina Kukushkina

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Добавление заголовка после upstream

2015-07-29 Пенетрантность Ekaterina Kukushkina
Привет.

On Wed, Jul 29, 2015 at 01:34:59AM -0400, Budulianin wrote:
 В ответ клиенту добавить?
 Добавить в запрос, который перенаправится какой-то ноде, после того, как она
 будет выбрана в upstream.
 Т.е. upstream уже выбран, мы его только теперь знаем(адрес ноды) и тогда мы
 добавляем его в header и он отправляется в ноду.
 

Запрос для передачи на апстрим формируется один раз и после этого не 
меняется. И в этом неизменном виде передается на выбранный апстрим. Если 
выбранный не отвечает, тот же самый запрос, сформированный ранее, может 
передаваться на другой апстрим (в зависимости от настроек 
proxy_next_upstream). Таким образом, эта переменная может содержать не 
только IP адрес, но и список IP адресов всех потыканных серверов. 

Вообще, использование upstream предполагает и требует использование 
идентично настроенных бэкэндов. Если они у вас различаются, то надо 
разносить их по разным группам и проксировать на разные группы в разных 
локейшенах. 

Есть несолько решений, которые позволяют добиться желаемого.
1. Для каждого бэкэнда определить отдельный виртуальный сервер и повесить 
его на какой-нибудь 127.0.0.1:9995 и т.д. В нем можно указать желаемые 
заголовки, специфичные для данного сервера. И в upstream определять не сами 
бэкэнды, а эти виртуальные сервера. (Но не забудьте сохранить все кастомные 
заголовки)

2. Отказываться от алгоритмов баллансировки nginx и мутить свой лунапарк, 
например, через map задавать используемый апстрим для группы ипользуемых 
key. Все key перечислять не надо, можно воспоользоваться регулярными 
выражениями. И после этого в proxy_pass указывать значение полученное в 
map. В этом случае на бэкэнды будет прилеть хидер Host, в котором будет 
указан желаемый IP адрес. 
Но, увы, это полностью убьет все плюшки upstream (такие как, next_upstream, 
weight и т.д)
 
Но зачем все это?

 Если ставить proxy_set_header рядом с proxy_pass, то заголовок не
 добавляется, я так понимаю, что переменная ещё пустая, поэтому
 заголовок не ставится. Но где уже известна эта переменная? Только в блоке
 upstream? Но там нельзя устанавливать заголовок.
 
 map $http_upgrade $connection_upgrade {
 default upgrade;
 '' close;
 }
 
 upstream tornado {
 hash $arg_key;
 
 server 127.0.0.1:9995;
 server 127.0.0.1:9996;
 server 127.0.0.1:9997;
 server 127.0.0.1:9998;
 server 127.0.0.1:;
 
 }
 
 
 server {
 listen 8080 default_server;
 
 access_log /var/log/nginx/prototypes-nginx-access.log;
 error_log /var/log/nginx/prototypes-nginx-error.log;
 
 location /ws/ {
 proxy_pass http://tornado;
 proxy_set_header Test-Header1 123;
 proxy_set_header Test-Header2 $upstream_addr;
 proxy_set_header Test-Header3 $host;
 proxy_http_version 1.1;
 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection $connection_upgrade;
 }
 
 }
 

-- 
Ekaterina Kukushkina

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Маршрутизация запросов

2015-07-29 Пенетрантность Ekaterina Kukushkina
Привет.

On Wed, Jul 29, 2015 at 01:43:11AM -0400, Budulianin wrote:
 Но hash же не гарантирует равномерного распределения запросов по бэкендам,
 он как раз гарантирует, что запросы с одинаковым id будут идти на одну и
 ту
 же ноду.
 
 А где-то описывается алгоритм работы hash?
 Чтобы можно было понять наверняка, всегда ли с одним id на одну и туже ноду
 или нет.
 Я конечно проверю, но ещё хотелось бы что-то в документации прочитать по
 этому поводу.

Hash (как и другие алгоритмы баллансировки) учитывает состояние апстрима. 
И если апстрим не доступен, то для маршрутизации запроса будет выбран один 
из оставшихся. 

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

Также обратите внимание на директиву max_fails. Хоть она и не фигурирует в 
вашей конструкции, но тем не менее присутствует в виде 'max_fails=1'. 
При каждом неуспешном ответе (или неответе в установленное время) nginx 
будет помечать указанный сервер как недоступный (на 10 секунд по 
умолчанию). И в этом случае nginx заново выберет актуальный апстрим для 
указанного хэша и будет использовать его до тех пор пока он жив.
 
Для того чтобы это подтвердить, рекомендую посмотреть error_log на предмет 
таймаутов от апстрима (они видны на уровне error). Также можно в access_log 
добавить пременные $upstream_status и $upstream_addr. В этом случае в 
access_log'е будут видны переходы с следующему апстриму.

-- 
Ekaterina Kukushkina

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: вернуть 444 по рефереру

2015-07-23 Пенетрантность Ekaterina Kukushkina
Nick, 

В общем и целом указанная конфигурация работоспособна. 
Мне не удалось воспроизвести на ней Вашу проблему.

Конфигурацию применяете через 'service nginx reload/kill -HUP'? Nginx успешно 
применил ее? В error.log есть ошибки?

Укажите ещё, пожалуйста, используемую версию nginx. 

On Thu, Jul 23, 2015 at 03:19:12PM +0300, Nick wrote:
 Konsole output
 Спасибо за ответ.
 В location, в принципе ничего военного:
 
location / {
proxy_pass http://backends;
 
limit_conn lz_global32;
limit_req zone=lz_req_global burst=10;
limit_req zone=auth burst=5 nodelay;
 
# for checking auth page connection:
if ($request_uri ~* ^/auth/login$)
{
access_log
  /var/log/nginx/server-auth.log;
}
 
if ($http_referer ~* 111\.111\.111\.111) {
access_log 
 /var/log/nginx/111.111.111.111_referer.log;
return 444;
 } 
 
 
 
# return 444 to fake googlebot
if ($http_user_agent ~* 'googlebot$')
{
access_log
 /var/log/nginx/fake-google-bot.ua.log;
return 444;
}
 }
 
 
 
 
 On 07/23/2015 01:42 PM, Ekaterina Kukushkina wrote:
  Добрый день.
 
  Конструкция вполне себе работоспособная. Показывайте больше деталей. 
  Например, конфигурацию всего локейшена, в котором этот if фигурирует.
 
  On Thu, Jul 23, 2015 at 11:55:53AM +0300, Nick wrote:
  Добрый день.
 
  Нужно вернуть 444 по рефереру
 
  Вот такая конструкция не работает:
  --
  Konsole output
 if ($http_referer ~* 111\.111\.111\.111) {
 access_log
   /var/log/nginx/111.111.111.111_referer.log;
 return 444;
 }
  --
  Спасибо.
  ___
  nginx-ru mailing list
  nginx-ru@nginx.org
  http://mailman.nginx.org/mailman/listinfo/nginx-ru
 
 

 ___
 nginx-ru mailing list
 nginx-ru@nginx.org
 http://mailman.nginx.org/mailman/listinfo/nginx-ru


-- 
Ekaterina Kukushkina
Support Engineer | NGINX, Inc.

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: вернуть 444 по рефереру

2015-07-23 Пенетрантность Ekaterina Kukushkina
Добрый день.

Конструкция вполне себе работоспособная. Показывайте больше деталей. 
Например, конфигурацию всего локейшена, в котором этот if фигурирует.

On Thu, Jul 23, 2015 at 11:55:53AM +0300, Nick wrote:
 Добрый день.
 
 Нужно вернуть 444 по рефереру
 
 Вот такая конструкция не работает:
 --
 Konsole output
if ($http_referer ~* 111\.111\.111\.111) {
access_log
  /var/log/nginx/111.111.111.111_referer.log;
return 444;
}
 --
 Спасибо.

 ___
 nginx-ru mailing list
 nginx-ru@nginx.org
 http://mailman.nginx.org/mailman/listinfo/nginx-ru


-- 
Ekaterina Kukushkina

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru