Sergey Shepelev | 19 Nov 17:02
Gravatar

Re: настройка редиректора

Большое спасибо.

2008/11/19 Igor Sysoev <is <at> rambler-co.ru>
On Wed, Nov 19, 2008 at 01:40:15PM +0300, Sergey Shepelev wrote:

> Компания - регистратор доменов предоставляет услугу HTTP redirect с
> юзерского домена на какой угодно адрес.
> Эту услугу обслуживает nginx на одном адресе, на одной машине.
>
> Клиентов часто ДДоСят, поэтому редиректор тоже под большой нагрузкой из-за
> этого.
>
> Доменов, с которых надо редиректить, примерно 500, это число будет расти, но
> достаточно медленно.
>
> Задача nginx - максимально быстро вернуть редирект и принудительно закрыть
> соединение.
>
> Есть ли аргументы в пользу "нестабильного" 0.7, например, он быстрее ищет
> сервер в списке виртхостов?

0.7 в этом плане не особо отличается от 0.5.

> Работающий nginx 0.5 давно настраивал плохо разбирающийся в nginx человек,
> поэтому присылать текущий конфиг смысла не вижу.
>
> Значительного увеличения производительности удалось достигнуть за счет
>
>      listen (ip):80 *default rcvbuf=2K backlog=128*;
>
> можно ли здесь еще что-нибудь улучшить?
>
> Учитывая, что практически все легальные запросы живых юзеров -
> http://домен/<http://xn--d1acufc/>,
> будет ли смысл писать конфиг виртхоста, как
>
> server {
>   listen (ip):80;
>   server_name vhost;
> *  location = / { rewrite .* http://redirect.to/; }
> *  location / { rewrite (.*) http://redirect.to/$1; }
> }

Да, так будет немного лучше. Я предпочитаю такой вариант:

-  location = / { rewrite .* http://redirect.to/; }
+  location = / { rewrite ^  http://redirect.to/; }

но не знаю, насколько "^" отличается от ".*" по производительности.
Возможно, они компилируются в одно и то же .

Спасибо. Кстати, разница между
1) один server, 400 if ( $host ~ vhost ) { redirect .* http://redirect.addr/ redirect; }
# да, я знаю что это плохо, но так было раньше, будет исправлено
и
2) много директив server, в каждой location = / { rewrite ^ http://redirect.to/; } location / { rewrite (.*) http://redirect.to/$1; }
ровно в два раза: 4500 и 9000 зап/сек соответственно.
 

> Может быть, можно подкрутить *_buffer_size, *_timeout? Посоветуете?
> Может нужно отключить посыл каких-то заголовков?
>
> **keepalive_timeout стоит 0.

reset_timedout_connection  on;

Это тоже стояло.
 

> "Производительность" тестировалась c помощью ab -c 1000 -n 50000
> http://vhost/
> сейчас это 9к запросов/сек, но я чувствую, что можно больше.


--
Игорь Сысоев
http://sysoev.ru


Alexey V. Karagodov | 19 Nov 22:48

Re: настройка редиректора

если у вас тупо рерайт сразу идёт, то  
директива location {} не нужна

server {
   listen 80 default accept_filter=httpready rcvbuf=128k sndbuf=128k  
backlog=4096; #default и прочие параметры нужно  
указать *только* один раз, поведение  
сохранится для всех серверов,  
слушающих указанную пару адрес/порт
#по поводу размеров rcvbuf и sndbuf лучше  
дополнительно проконсультироваться. в  
вашей ситуации имеет смысл делать их  
не более 8к или что-то вроде, т.к. вы  
картинко/контенто не раздаёте
   server_name requested_domain.tld;
   rewrite ^ http://target_domain.tld$request_uri;

}

всё

так-же, по-гуглите и тут в рассылке  
было, nginx обслуживающий одновременно 200  
000 коннектов


On 19.11.2008, at 19:02, Sergey Shepelev wrote:

> Большое спасибо.
>
> 2008/11/19 Igor Sysoev <is <at> rambler-co.ru>
>
>> On Wed, Nov 19, 2008 at 01:40:15PM +0300, Sergey Shepelev wrote:
>>
>>> Компания - регистратор доменов  
>>> предоставляет услугу HTTP redirect с
>>> юзерского домена на какой угодно  
>>> адрес.
>>> Эту услугу обслуживает nginx на одном  
>>> адресе, на одной машине.
>>>
>>> Клиентов часто ДДоСят, поэтому  
>>> редиректор тоже под большой  
>>> нагрузкой
>> из-за
>>> этого.
>>>
>>> Доменов, с которых надо редиректить,  
>>> примерно 500, это число будет расти,
>> но
>>> достаточно медленно.
>>>
>>> Задача nginx - максимально быстро  
>>> вернуть редирект и принудительно
>> закрыть
>>> соединение.
>>>
>>> Есть ли аргументы в пользу  
>>> "нестабильного" 0.7, например, он  
>>> быстрее ищет
>>> сервер в списке виртхостов?
>>
>> 0.7 в этом плане не особо отличается от  
>> 0.5.
>>
>>> Работающий nginx 0.5 давно настраивал  
>>> плохо разбирающийся в nginx
>> человек,
>>> поэтому присылать текущий конфиг  
>>> смысла не вижу.
>>>
>>> Значительного увеличения  
>>> производительности удалось  
>>> достигнуть за счет
>>>
>>>     listen (ip):80 *default rcvbuf=2K backlog=128*;
>>>
>>> можно ли здесь еще что-нибудь  
>>> улучшить?
>>>
>>> Учитывая, что практически все  
>>> легальные запросы живых юзеров -
>>> http://домен/ <http://xn--d1acufc/><http://xn--d1acufc/>,
>>> будет ли смысл писать конфиг  
>>> виртхоста, как
>>>
>>> server {
>>>  listen (ip):80;
>>>  server_name vhost;
>>> *  location = / { rewrite .* http://redirect.to/; }
>>> *  location / { rewrite (.*) http://redirect.to/$1; }
>>> }
>>
>> Да, так будет немного лучше. Я  
>> предпочитаю такой вариант:
>>
>> -  location = / { rewrite .* http://redirect.to/; }
>> +  location = / { rewrite ^  http://redirect.to/; }
>>
>> но не знаю, насколько "^" отличается от  
>> ".*" по производительности.
>> Возможно, они компилируются в одно и  
>> то же .
>>
>
> Спасибо. Кстати, разница между
> 1) один server, 400 if ( $host ~ vhost ) { redirect .*
> http://redirect.addr/redirect; }
> # да, я знаю что это плохо, но так было  
> раньше, будет исправлено
> и
> 2) много директив server, в каждой location = /  
> { rewrite ^
> http://redirect.to/; } location / { rewrite (.*) http://redirect.to/ 
> $1; }
> ровно в два раза: 4500 и 9000 зап/сек  
> соответственно.
>
>
>>
>>> Может быть, можно подкрутить *_buffer_size,  
>>> *_timeout? Посоветуете?
>>> Может нужно отключить посыл каких-то  
>>> заголовков?
>>>
>>> **keepalive_timeout стоит 0.
>>
>> reset_timedout_connection  on;
>>
>
> Это тоже стояло.
>
>
>>
>>> "Производительность" тестировалась c  
>>> помощью ab -c 1000 -n 50000
>>> http://vhost/

>>> сейчас это 9к запросов/сек, но я  
>>> чувствую, что можно больше.
>>
>>
>> --
>> Игорь Сысоев
>> http://sysoev.ru

>>
>>

Sergey Shepelev | 20 Nov 11:56
Gravatar

Re: настройка редиректора



2008/11/20 Alexey V. Karagodov <kav <at> karagodov.name>
если у вас тупо рерайт сразу идёт, то директива location {} не нужна

server {
 listen 80 default accept_filter=httpready rcvbuf=128k sndbuf=128k backlog=4096; #default и прочие параметры нужно указать *только* один раз, поведение сохранится для всех серверов, слушающих указанную пару адрес/порт
#по поводу размеров rcvbuf и sndbuf лучше дополнительно проконсультироваться. в вашей ситуации имеет смысл делать их не более 8к или что-то вроде, т.к. вы картинко/контенто не раздаёте
 server_name requested_domain.tld;
 rewrite ^ http://target_domain.tld$request_uri;
}

всё

так-же, по-гуглите и тут в рассылке было, nginx обслуживающий одновременно 200 000 коннектов

Спасибо за короткий rewrite,
rcvbuf установлен в 1К. sndbuf не трогал.


Gmane