Сегодня задали вопрос “как ограничить скорость на один IP в nginx” ? Вопрос избитый и куча раз уже обговорен, куча решений. Основная проблема в том – что известный модуль ngx_http_limit_conn_module ограничивает скорость только для сессии с одного адреса, и как уже говорилось многими и много раз – это значит что если качать в 100 потоков – скорость будет ХХ(разрешенный потолок) * на кол-вл потоков.
Для своей ситуации как ко мне обратились – поставил модуль “nginx_limit_speed_module” – ставится просто – нужно пересобрать nginx с этим модулем, в моем случае я взял текущие параметры nignx на нужном мне сервере и пустил собираться исходники с нужным модулем.
начнем:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# cd /usr/src # git clone https://github.com/yaoweibin/nginx_limit_speed_module.git # tar xvf nginx-1.8.0.tar.gz # cd nginx-1.8.0 # ./configure --prefix=/usr/share/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --http-client-body-temp-path=/var/lib/nginx/tmp/client_body \ --http-proxy-temp-path=/var/lib/nginx/tmp/proxy \ --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi \ --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi \ --http-scgi-temp-path=/var/lib/nginx/tmp/scgi \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/lock/subsys/nginx \ --user=nginx --group=nginx \ --with-file-aio \ --with-ipv6 \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_xslt_module \ --with-http_image_filter_module \ --with-http_geoip_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_degradation_module \ --with-http_stub_status_module \ --with-http_perl_module \ --with-mail \ --with-mail_ssl_module \ --with-debug \ --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector \ --param=ssp-buffer-size=4 -m64 -mtune=generic' \ --with-ld-opt=-Wl,-E \ --add-module=/usr/src/nginx_limit_speed_module # make # make install |
после этого добавляем в настройки nignx в раздел http:
1 |
limit_speed_zone one $binary_remote_addr 10m; |
далее нужно было ограничить скорость отдачи для определенного домена, я не стал в location прописывать и прописал в server:
1 |
limit_speed one 400k; |
у меня вышло ограничение на один адрес 400к не зависимо от кол-ва сессий.
PS: для тех кому надо на сайте раздавать большие файлы, видео, стоит воспользоваться этим модулем но ограничение включать в location для каталога откуда идет раздача.