Когда может возникнуть ситуация, что rev-instance != instance?
Добрый день. В функции ngx_epoll_process_events() есть такой участок кода: for (i = 0; i events; i++) { c = event_list[i].data.ptr; instance = (uintptr_t) c 1; c = (ngx_connection_t *) ((uintptr_t) c (uintptr_t) ~1); rev = c-read; if (c-fd == -1 || rev-instance != instance) { . } . } Условие rev-instance != instance будет проверяться, если c-fd != -1, т.е. в случае когда дескриптор не был закрыт. c-fd устанавливается в -1 в функциях: ngx_close_connection() и ngx_close_accepted_connection(). Но rev-instance инвертируется в функции ngx_get_connection(), которая вызывается в ngx_event_accept(). Получается, что несоответсвие instance возможно, когда мы не закрыли соединение и при этом акцептировали новое и для него была выделена уже существующая структура ngx_connection_t ?? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,243182,243182#msg-243182 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Nginx and Jboss AS
Всем привет. Как передать доменное имя джейбосу, и как его получить? Сейчас сервер запущен как демон коммандой ./standalone.sh Конфиг файл, вернее его часть location ~ /myapp/ { proxy_pass http://127.0.0.1:8080; } пытался получить имя домена, по которому обращались , но получал 127.0.0.1 К приложению обращаются по разным урлам, от этоо зависит что показывать. Например : http://nginx.org/myapp/ или http://dev.nginx.org/myapp/ На пхп всё работает и сервер передаёт. там работает fastcgi_param SERVER_SOFTWARE Posted at Nginx Forum: http://forum.nginx.org/read.php?21,243184,243184#msg-243184 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Nginx and Jboss AS
Дык установи заголовок Host в что тебе надо... :) 2013/9/27 Vurtatoo nginx-fo...@nginx.us Всем привет. Как передать доменное имя джейбосу, и как его получить? Сейчас сервер запущен как демон коммандой ./standalone.sh Конфиг файл, вернее его часть location ~ /myapp/ { proxy_pass http://127.0.0.1:8080; } пытался получить имя домена, по которому обращались , но получал 127.0.0.1 К приложению обращаются по разным урлам, от этоо зависит что показывать. Например : http://nginx.org/myapp/ или http://dev.nginx.org/myapp/ На пхп всё работает и сервер передаёт. там работает fastcgi_param SERVER_SOFTWARE Posted at Nginx Forum: http://forum.nginx.org/read.php?21,243184,243184#msg-243184 ___ 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
Re: [Анонс] Модуль nginx-http-rdns
On Fri, 27 Sep 2013 16:29:50 +0400 Dmitry Shurupov dmitry.shuru...@flant.ru wrote: Всем привет! Представляю вниманию сообщества модуль nginx-http-rdns, реализующий простой механизм контроля доступа по доменному имени клиента (имя определяется по результатам выполнения обратного DNS-запроса). Модуль nginx-http-rdns: * выполняет преобразование IP-адреса клиента в доменное имя; * позволяет создавать простые списки контроля доступа (разрешить / запретить) на основе полученного доменного имени; * поддерживает модуль rewrite для динамического включения / выключения внутри директив if. Используем в production уже продолжительное время — помогает нам в борьбе с DDoS-атаками. Привет. Нет обратки - значит бот? Документация на русском языке: http://flant.ru/projects/nginx-http-rdns Документация на английском языке: http://wiki.nginx.org/HttpRdnsModule (она же есть в README на GitHub) Проект на GitHub: https://github.com/flant/nginx-http-rdns Будем рады патчам и сообщениям о багах. -- Дмитрий Шурупов, руководитель проектов ЗАО «Флант» http://flant.ru/ +7 (495) 721-10-27, доб. 442 +7 (926) 120-77-71 ___ 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
Re: [Анонс] Модуль nginx-http-rdns
On Fri, 27 Sep 2013 16:52:40 +0400 Dmitry Shurupov dmitry.shuru...@flant.ru wrote: On 27.09.2013 16:50, Peter B. Pokryshev wrote: Привет. Нет обратки - значит бот? Далеко не факт. Я про тоже, а в чем защита от ддоса? Вот от ддоса: https://github.com/kyprizel/testcookie-nginx-module Например, помогает (вместе с лимитами по количеству запросов) делать исключения для поисковых ботов и других известных служб. -- Дмитрий Шурупов, руководитель проектов ЗАО «Флант» http://flant.ru/ +7 (495) 721-10-27, доб. 442 +7 (926) 120-77-71 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru ^^ С уважением, Пётр Покрышев ValueHost ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: [Анонс] Модуль nginx-http-rdns
On 27.09.2013 17:02, Peter B. Pokryshev wrote: Я про тоже, а в чем защита от ддоса? Вот от ддоса: https://github.com/kyprizel/testcookie-nginx-module Да, этим мы тоже пользуемся :-) Нет утверждений, что nginx-http-rdns — самодостоточное решение защиты от DDoS'а. Может использоваться как одна из «шестеренок» в комплексной системе защиты (в комбинации с различными средствами). -- Дмитрий Шурупов, руководитель проектов ЗАО «Флант» http://flant.ru/ +7 (495) 721-10-27, доб. 442 +7 (926) 120-77-71 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Когда может возникнуть ситуация, что rev-instance != instance?
Но после закрытия дескриптора, ядро автоматически удалит этот дескриптор из своих структур и не будет по нему отслеживать события. Ход событий в общем: воркер блокируется на epoll_wait(), по истечении тайм-аута либо по получении nevent событий, воркер просыпается и в цикле перебирает эти события. Допустим, встретилось событие на чтение и recv() вернуло 0, мы закрываем соединение, при этом дескриптор удаляется из структур подсистемы epoll, также в массив cycle-free_connections возвращается структура ngx_connection_t. Я не понимаю такой момент: почему ядро потом может вернуть событие для уже закрытого сокета? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,243182,243207#msg-243207 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Когда может возникнуть ситуация, что rev-instance != instance?
Hello! On Fri, Sep 27, 2013 at 11:32:20AM -0400, megalodon wrote: Но после закрытия дескриптора, ядро автоматически удалит этот дескриптор из своих структур и не будет по нему отслеживать события. Ход событий в общем: воркер блокируется на epoll_wait(), по истечении тайм-аута либо по получении nevent событий, воркер просыпается и в цикле перебирает эти события. Допустим, встретилось событие на чтение и recv() вернуло 0, мы закрываем соединение, при этом дескриптор удаляется из структур подсистемы epoll, также в массив cycle-free_connections возвращается структура ngx_connection_t. Я не понимаю такой момент: почему ядро потом может вернуть событие для уже закрытого сокета? Ядро возвращает более одного события за раз. А соединение может быть закрыто не только при обработке событий от этого соединения, но и при обработке событий от другого соединения. Простейший пример: от бекенда пришёл ответ, мы его прочитали, отправили клиенту, закрыли оба соединения - и с бекендом, и с клиентом. -- Maxim Dounin http://nginx.org/en/donation.html ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Когда может возникнуть ситуация, что rev-instance != instance?
On Friday 27 September 2013 19:32:20 megalodon wrote: Но после закрытия дескриптора, ядро автоматически удалит этот дескриптор из своих структур и не будет по нему отслеживать события. Ход событий в общем: воркер блокируется на epoll_wait(), по истечении тайм-аута либо по получении nevent событий, воркер просыпается и в цикле перебирает эти события. Допустим, встретилось событие на чтение и recv() вернуло 0, мы закрываем соединение, при этом дескриптор удаляется из структур подсистемы epoll, также в массив cycle-free_connections возвращается структура ngx_connection_t. Я не понимаю такой момент: почему ядро потом может вернуть событие для уже закрытого сокета? Оно его уже вернуло, ещё до закрытия. Там есть комментарий: /* * the stale event from a file descriptor * that was just closed in this iteration */ Ключевой момент тут this iteration, вся речь идет о текущей итерации обработки событий. Мы могли закрыть соединение до того, как добрались до обработки событий, с ним связанных (первая проверка). Могли закрыть соединение на read-событии, а следом у нас идет write (вторая проверка). -- Валентин Бартенев http://nginx.org/en/donation.html ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: leaky bucket limit_req
Получается, что если в течение 1мс пришли 2 запроса, то второй будет дропнут, даже если в конфиге будет прописано 2000r/s? Только при условии, что burst был исчерпан. Posted at Nginx Forum: http://forum.nginx.org/read.php?21,10518,243214#msg-243214 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Когда может возникнуть ситуация, что rev-instance != instance?
Пытаюсь вникнуть в мысль: Мы могли закрыть соединение до того, как добрались до обработки событий. Но где в промежутке между epoll_wait() и итерацией цикла, в которой мы обрабатываем событие то место, где мы можем потенциально закрыть сокет? events = epoll_wait(ep, event_list, (int) nevents, timer); err = (events == -1) ? ngx_errno : 0; if (flags NGX_UPDATE_TIME || ngx_event_timer_alarm) { ngx_time_update(); } if (err) { . } if (events == 0) { . } ngx_mutex_lock(ngx_posted_events_mutex); for (i = 0; i events; i++) { c = event_list[i].data.ptr; instance = (uintptr_t) c 1; c = (ngx_connection_t *) ((uintptr_t) c (uintptr_t) ~1); rev = c-read; if (c-fd == -1 || rev-instance != instance) { Если c-fd не равно -1 и если rev-instance не совпадает с instance, то получается, что где-то между строками events = epoll_wait(ep, event_list, (int) nevents, timer); и . if (c-fd == -1 || rev-instance != instance) { произошло инвертирование этого поля? Несоответствие instance возможно, когда мы уже закрыли соединение, про которое нам сообщает ядро. Получается, что пока процесс спал, будучи заблокированным на шаге epoll_wait(), каким-то образом сокет закрылся и структура ngx_connection_t была использована повторно, но как, ведь процесс был заблокирован? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,243182,243215#msg-243215 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Когда может возникнуть ситуация, что rev-instance != instance?
Все, осознал: воркер, получив очередной event_list[] и обрабатывая некоторое событие может закрыть также и другой дескриптор, связанный с обрабатываемым, причем событие с этого другого закрываемого дескриптора также могло попасть в этот event_list[], и пока мы до него доберемся, структура, которая была связана с ним может быть уже использована под новое соединение. Спасибо всем!!! Posted at Nginx Forum: http://forum.nginx.org/read.php?21,243182,243217#msg-243217 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Когда может возникнуть ситуация, что rev-instance != instance?
On Friday 27 September 2013 21:26:13 megalodon wrote: Все, осознал: воркер, получив очередной event_list[] и обрабатывая некоторое событие может закрыть также и другой дескриптор, связанный с обрабатываемым, причем событие с этого другого закрываемого дескриптора также могло попасть в этот event_list[], и пока мы до него доберемся, структура, которая была связана с ним может быть уже использована под новое соединение. Именно так. -- Валентин Бартенев http://nginx.org/en/donation.html ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru