Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Ограничение количе ства одновременных соединений на сайт
On Fri, Feb 15, 2008 at 11:52:38AM +0300, Volkov Oleg wrote:
> nginx используется для отдачи статики и перенаправления запросов к apache для
> обработки php скриптов. Хочется ограничить количество запросов к apache для
> данного сайта.
>
> worker_processes 20;
> events {
> worker_connections 8192;
> use epoll;
> }
> http {
> ...
> limit_zone one $binary_remote_addr 10m;
> limit_conn one 64;
> limit_zone too $http_host 10m;
> upstream apache0 {
> ip_hash;
> ...
> }
> server {
> ....
>
> location ~* ^(.+\.(php|html)|.*/)$ {
> proxy_pass http://apache0;
> proxy_set_header Host <ZZZ>;
> proxy_set_header X-Forwarded-For
> $proxy_add_x_forwarded_for;
> proxy_set_header X-Real-IP $remote_addr;
> index index.php index.html;
> limit_conn too 100;
> }
> location / {
> root /data/<ZZZ>/htdocs;
> }
> server {
> ...
> limit_conn too 200;
> ...
> }
> }
>
> Как более оптимально написать ограничения (для too)?
> 1. Смущает что limit_zone too $http_host 10m; явно не оптимальная запись.
> Значение переменной $http_host может быть достаточно длинным - нет ли готовой
> переменной, нумерующий виртуальные хосты? Или воткнуть внутрь каждой секции
> server строчку типа set $server_number 1; (2,3,4,...) и использовать в хэше
> too переменную $server_number вместо $http_host.
> 2. Как правильно вычислить размер хэша? Он зависит от количества одновременно
> обрабатываемых значений или от количества уникальных значений переменной
> $http_host ? Если второе, то стоит его уменьшить (количество всех алиасов
> сайтов не более 100) ?
От одновременно обрабатываемых уникальных значений, но нужно учитывать,
что в $http_host могут влить что угодно. Лучше для этого использовать
$server_name - оно предсказуемо. Можно в качестве $server_name поставить
цифру:
server_name_in_redirect off;
server{
server_name 1 host1.ru alias.host1.ru;
server{
server_name 2 host2.ru;
$server_name 1/2/etc в этом случае будет фигурировать только в error_log.
--
Игорь Сысоев
http://sysoev.ru
|