Тонкая настройка nginx для маленького VPS
На VPS с 512 МБ памяти дефолтный nginx ведёт себя нормально ровно до первого всплеска трафика. Потом начинаются качели: то памяти не хватает, то воркеры простаивают. Собрал заметки о том, что реально помогло, без карго-культа.
Первое — число воркеров. Гнаться за большим значением смысла нет, привязка к ядрам работает лучше всего:
worker_processes auto;
worker_rlimit_nofile 8192;
Второе — соединения на воркер. На маленькой машине незачем выкручивать это в десятки тысяч, иначе резервируется память впустую:
events {
worker_connections 1024;
multi_accept on;
}
Буферы — частый источник проблем. Слишком большие буферы на много соединений быстро съедают RAM. Я подбирал под реальный размер ответов, а не «с запасом»:
client_body_buffer_size 16k;
client_header_buffer_size 1k;
large_client_header_buffers 2 4k;
Сжатие включил, но без фанатизма — высокий уровень gzip ест CPU, которого на дешёвом VPS и так немного:
gzip on;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/javascript;
Грабли, которые стоили мне вечера: keepalive_timeout по умолчанию держит соединения дольше, чем нужно для статики, и на пике это лишние открытые сокеты. Снизил до 15 секунд — стало ровнее.
Итог по памяти: после правок idle-потребление упало примерно на треть, а поведение под нагрузкой стало предсказуемым. Главное — не копировать чужие «оптимальные» конфиги, а мерить под свой трафик.
← К записям