nginx — маленький, але дуже потужний і ефективний веб-сервер
| 15 травня, 2008 |
Хотів би розповісти вам про один дуже корисний інструмент, який я використовую у своєї адміністраторській практиці. Цей інструмент — nginx, маленький і легкий, але дуже потужний і ефективний веб-сервер, створений Іґарєм Сісоєвим (Игор Сисоев) для використання на серверах компанії Rambler і люб’язно наданий у вільне користування спільноті.
Цей сервер може використовуватись, як самостійний http-сервер або ж, як reverse proxy перед веб-сервером apache, а також будь-яким іншим “важким” веб-сервером для зниження навантаження на backend-сервері при великій кількості одночасних http-сесій. Як самостійний сервер, nginx без проблем витримує величезні навантаження при роздачі статичного контенту (images, html-pages і так далі).
Основні можливості nginx
– обслуговування статичних запитів, індексних файлів, автоматичне створення переліків файлів;
– акселероване проксимування без кешування, простий розподіл навантаження і відмовостійкість;
– акселерована підтримка віддалених FastCGI серверів, простий розподіл навантаження і відмовостійкість;
– модульність, фільтри, у тому числі й стиснені (gzip), byte-ranges (довантаження), chunked відповіді, SSI-фільтр; кілька підзапитів на одній сторінці, що обробляються в SSI-фільтрі через проксі або FastCGI, виконується паралельно.
– підтримка SSL;
Додаткові можливості
– віртуальні сервери, що визначаються за ІР адресою або доменним ім’ям;
– підтримка keep-alive і pipelined з’єднань;
– гнучкість конфігурації на рівні Apache, налаштування таймаутів та розмірів буферів;
– зміна налаштувань і оновлення виконуваного файлу без перерви обслуговування клієнтів;
– налаштування форматів журналів, їхня швидка ротація;
– спеціальні сторінки для кодів 400-599;
– зміна URI за допомогою регулярних виразів;
– виконання різних функцій в залежності від адреси клієнта;
– обмеження доступу в залежності від адреси клієнта і за паролем (Basic авторизація);
– обмеження швидкості віддачі відповідей;
Основні архітектурні особливості nginx
– один головний процес і кілька робочих, які працюють під не привілегійованого користувача;
– підтримка kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), rt signals (Linux 2.2.19+), /dev/poll (Solaris 7 11/99+), select та poll;
– використання можливостей, наданих kqueue, як то как EV_CLEAR, EV_DISABLE (для тимчасового вимкнення подій), NOTE_LOWAT, EV_EOF, число доступних даних, коди помилок;
– підтримка sendfile (FreeBSD 3.1+), sendfile (Linux 2.2+), sendfile64 (Linux 2.4.21+) і sendfilev (Solaris 8 7/01+);
– підтримка accept-фільтрів (FreeBSD 4.1+) і TCP_DEFER_ACCEPT (Linux 2.4+);
– на 10 000 неактивних keep-alive з’єднань використовується близько 2.5Мб пам’яті;
– мінімум операцій копіювання даних;
Кокретно у моїй роботі, я використовую nginx в якості основного веб-сервера при побудові безкоштовних веб-хостингів. Я розробив кілька специфічних модулів для додавання банерів і обрахунку статистики відвідування, і нині один з ниших основних серверів здатен витримувати навантаження у 150-200 Mbit/s дуже фрагментованого трафіку (усі файли маленькі). Як на мене, то це хороший результат, оскільки раніше на цьому ж залізі Apache навіть після усіх мислимих оптимізацій не міг обробляти більше 60-80Mbit/s.
Автор: Alexey Kovyrin



