Ускоряем работу сайта, используя быстрый и надёжный веб‑сервер nginx
nginx — это простой, быстрый и надёжный сервер. Применение nginx очень эффективно для отдачи статического контента и в качестве прокси‑сервера перед динамическими сайтами.
NGINX — это сокращение от «engine x», которое правильно произносится как энжин‑икс, хотя в быту этот веб‑сервер наиболее часто называют «нгинкс». Это очень быстрый веб‑сервер, который замечательно справляется с отдачей статического контента (изображений, стилей, скриптов и прочих скачиваемых файлов), отлично подходит для проксирования запросов динамического контента, позволяя кешировать полученные от бэкенда ответы.
В режиме проксирования nginx даёт существенный прирост производительности, особенно в тех случаях, когда бэкендом является медленный веб‑сервер, требующий много ресурсов (apache, например).
NGINX способен работать и без бэкенд‑сервера — в PHP‑проектах связка nginx + FastCGI (php-fpm) часто более производительна, нежели более классическая связка nginx + apache.
В ruby-проектах nginx тоже весьма популярен — как правило, именно он выступает в качестве фронтенда для рельсовых веб‑серверов Puma, Thin, Unicorn, Rainbows, Passenger.
Основные функции веб‑сервера:
- обработка запросов статических и индексных файлов
- проксирование запросов с кешированием и без
- простое распределение нагрузки и отказоустойчивость
- поддержка FastCGI, серверов Memcached и хранилищ Redis
- сжатие (gzip)
- byte-ranges (докачка)
- chunked ответы
- HTTP‑аутентификация
- SSI‑фильтры
- поддержка SSL
Тематические статьи
Apache — это HTTP‑сервер. Основными достоинствами считаются надёжность и гибкость конфигурации.
На серверах для размещения сайтов и веб‑приложений устанавливается программное обеспечение, которое требуется для работы программной логики сайта и других служб домена, для обслуживания и мониторинга, а также для защиты от взлома и устойчивости к нагрузкам.
Sphinx и Elasticsearch — это поисковые «движки», которые обеспечивают более быстрый поиск и фильтрацию по сравнению с реляционными базами данных, а также предоставляют возможность использования многих полезных функций поиска: учитывают морфологию языка, осуществляют фасеточный поиск, работают со стоп‑словами, поддерживают выборочную индексацию и позволяют настроить формулу определения релевантности документов.
Memcached — это хранилище «ключ => значение», использование которого очень эффективно для ускорения работы сайта или веб‑приложения.
СУБД — это очень часто «узкое место» в производительности веб‑приложений. В момент, когда сервер баз данных не может справиться с нагрузками, производится масштабирование. В современных высоконагруженных системах эффективное управление данными невозможно без использования методов масштабирования и обеспечения отказоустойчивости. Репликация, партиционирование и шардирование — ключевые подходы, которые позволяют распределять данные, повышать производительность и гарантировать доступность. Разберем каждый из них подробно.
Redis — сетевое журналируемое хранилище данных типа «ключ — значение», которое обрабатывает данные в оперативной памяти и обладает механизмами снимков и журналирования для обеспечения постоянного хранения. Хранилище поддерживает строки, списки, хеши, обычные и сортируемые множества, потоки (streams) и другие типы данных.
Кеширование статических ресурсов (картинок, скриптов, стилей) и неизменяющихся страниц на стороне браузера может сэкономить время загрузки страниц, если пользователь посещает сайт многократно или за визит просматривает несколько страниц, которые используют одинаковые ресурсы.
Увеличить отзывчивость интерфейса и снизить нагрузку на сервер можно при помощи Ajax‑навигации: если не перезагружать страницу целиком, а обновлять только содержание или отдельные фрагменты, то скорость работы сайта или приложения существенно возрастёт.
Бывает так, что часть содержимого страницы нужна не всем или не всегда, но на генерацию или передачу этого материала тратится много ресурсов. В этом случае имеет смысл сделать загрузку «ленивой», то есть не генерировать и не загружать в браузер информацию до тех пор, пока она не понадобится.