В Apache у нас есть несколько замечательных решений для ограничения использования полосы пропускания на каждый vhost, например mod_bandwidth. Однако с тех пор, как я начал использовать nginx, я не смог найти способ ограничения и мониторинга использования полосы пропускания для каждого блока сервера.
Я хотел бы услышать несколько предложений по мониторингу и ограничению использования полосы пропускания на блок сервера в nginx.
решение1
Вы можете использовать limit_rate
для ограничения пропускной способности. У меня это также работает на версии сообщества nginx.
Например, пропускная способность может быть ограничена 1000 байт в секунду для всего серверного блока следующим образом:
server {
listen 80;
location / {
limit_rate 1k;
}
}
решение2
В Nginx Plus имеются встроенные опции для ограничения пропускной способности для каждого хоста.
Если вы хотите добиться этого с помощью общедоступной версии nginx, у вас есть 2 варианта: (поскольку она включает только пул пропускной способности для каждого IP-адреса.)
1: Ограничьте пропускную способность всего процесса nginx, используя внешние инструменты или таблицы IP.
2: Обслуживайте этот конкретный контент через proxy-pass в lighttpd и установите server-throttle в lighttpd
server.kbytes-per-second = 6250
Если бы мы хотели ограничить трафик downloads.domain.net, то Lighthttpd имел бы следующую конфигурацию:
server.port = 81
server.document-root = "/path/to/downloads"
index-file.names = ( )
Nginx:
server {
listen 80;
server_name downloads.domain.net;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:81;
}
}
Конечно, вы также можете использовать прокси-сервер для определенных файлов, папок и т. д.
В конечном итоге: использование этого, а также IP-таблицы, регулирующей весь трафик порта 80 (и 443), является оптимальным решением в случае, если вы не хотите выходить за пределы определенной точки полосы пропускания. (Например, службы VoIP могут требовать жесткого ограничения на http-трафик).