nginx-0.8.0
Maxim Dounin
mdounin at mdounin.ru
Wed Jun 3 18:27:45 MSD 2009
Hello!
On Wed, Jun 03, 2009 at 03:42:05PM +0300, Sergej Kandyla wrote:
> Maxim Dounin пишет:
>>> а если "server_name _" для мультидоменного бекенда?
>>>
>>> server {
>>> server_name _ ;
>>> location / {
>>> proxy_pass http://apache;
>>> }
>>> }
>>>
>>>
>>>
>>> как уже говорили, банить по IP слишком строго. Много невинных юзеров
>>> страдают.
>>> Ограничить нужно только коннекты к виртуалхостам бекенда, т.е. чтобы
>>> один конкретный IP не мог создать более чем (например) 10 коннкетов
>>> к любому из виртуалхостов.
>>>
>>
>> Прочитайте доки внимательно. Там где-то написано что в качестве
>> переменной, по которой делается ограничение, можно использовать только
>> ip и ничего больше?
>>
>
> Правильно ли я понимаю, что
>
> server {
> server_name _ ;
> limit_zone conn_to_server $server_name 10m;
Just a side note: limit_zone может быть только в контексте http.
> location / {
> proxy_pass http://apache;
> limit_conn conn_to_server 10;
> }
> }
>
>
> будет ограничивать запросы для данного server_name, незивисо от
> remote_addr ?
> т.е. получится на server_name max 10 сессий,
Да. Только не надо забывать что server_name в данном случае будет
всегда '_'. Если задача ограничить именно на vhost бекенда -
вероятно следует использовать $host.
> в то время как хочется для
> данного server_name иметь максимум 10 сессий для remote_addr клиента.
А где написано, что в качестве переменной, по которой делается
ограничение, можно использовать только встроенные переменные?
Кто мешает воспользоваться set и сделать нужную переменную?
Как-то так:
limit_zone conn $blah 10m;
server {
...
set $blah "$binary_remote_addr$host";
location / {
limit_conn conn 10;
proxy_pass ...
}
}
Maxim Dounin
More information about the nginx-ru
mailing list