Nginx (engine x — по-русски произносится как энджи́нкс) — веб-сервер, занимающий первое место по частоте использования среди 100 000 самых посещаемых сайтов в мире. Nginx также работает как обратный прокси-сервер для обработки запросов и передачи ответов для WSGI-серверов Python или даже других веб-серверов, таких как Apache.
Как Nginx используется при развертывании веб-приложения Python?
Nginx обычно используется в качестве веб-сервера для предоставления статических ресурсов, таких как изображения, CSS-стили и JavaScript-файлы, веб-браузеру.
Также Nginx часто настраивается как обратный прокси-сервер, передающий соответствующие входящие HTTP-запросы на сервер WSGI. Сервер WSGI создает динамический контент, выполняя Python-код. Когда сервер WSGI возвращает ответ, который часто имеет формат HTML, JSON или XML, обратный прокси-сервер отправляет его клиенту.
Цикл HTTP-запроса и ответа с обратным прокси-сервером и сервером WSGI можно увидеть на следующей диаграмме.
Как правило, клиент не знает или не должен знать, что результат сгенерировало веб-приложение Python. В принципе, результат мог быть сгенерирован одной или несколькими серверными системами, написанными на любом языке программирования, а не только на Python.
Nginx или Apache HTTP Server?
Давайте разберемся с этими двумя «конкурирующими» серверами. Оба они являются фантастическими проектами с открытым исходным кодом, и любой из них хорошо подойдет для развертывания вашего веб-приложения. На самом деле, многие ведущие глобальные веб-приложения используют в своих развертываниях оба сервера — для работы на разных этапах цикла HTTP-запроса и ответа.
Некоторые разработчики используют Nginx чаще, чем Apache, потому что конфигурация Nginx проще.
Обеспечение безопасности Nginx
Конфигурация Nginx по умолчанию (после стандартной установки с помощью системного менеджера пакетов или компиляции из исходного кода) является хорошей основой для обеспечения безопасности. Однако настройка шифров и перенаправлений может быть несколько запутанной для новичков. Мы советуем прочитать некоторые из нижеперечисленных материалов. Так вы сможете убедиться, что избегаете наиболее распространенных ошибок безопасности.
- В руководстве «HTTPS с Let’s Encrypt и nginx» рассказывается об установке бесплатного SSL-сертификата от Let’s Encrypt для защиты HTTP-соединений с вашим сервером nginx через HTTPS.
- Инструменты Nginx Config и Cipherlist генерируют конфигурации и шифры для Nginx.
- Gixy — это статический анализатор для вашей конфигурации Nginx, который может сообщить вам о проблемах с настройкой.
- Туториал «Strong SSL Security on Nginx» показывает, как смягчить последствия таких широко известных SSL-атак, как Logjam, Heartbleed и FREAK.
Ресурсы по Nginx
Nginx можно использовать и без Python, существует огромное количество фантастических ресурсов, полезных для установки, настройки и оптимизации этой реализации веб-сервера. Ниже перечислены некоторые из них.
- Глава «Nginx» в книге «Architecture of Open Source Applications» содержит большой раздел, посвященный особенностям масштабирования Nginx и урокам, извлеченным в ходе разработки.
- nginx-quick-reference предоставляет отличные советы для повышения производительности Nginx, обеспечения безопасности и многих других важных аспектов.
- «Inside Nginx: How we designed for performance and scale» — это статья в блоге разработчиков Nginx о том, почему они считают свою модель архитектуры более производительной и масштабируемой, чем другие подходы, используемые для создания веб-серверов.
- В статье «Test-driving web server configuration» рассказывается о том, как итеративно применять изменения конфигурации, такие как маршрутизация трафика в Piwik для веб-аналитики, обратное проксирование на серверы приложений и другое.
- «Hacker News broke our site – how Nginx and PageSpeed fixed the problem» — это в первую очередь об оптимизации конфигурации Nginx для более эффективных SSL-соединений. Эта статья также описывает управление конфигурацией с помощью Ansible и модуля Pagespeed, созданного Google для Nginx и Apache HTTP Server.
- «Nginx for Developers: An Introduction» описывает первые шаги по настройке и запуску начальной конфигурации Nginx.
- «A faster Web server: ripping out Apache for Nginx» объясняет, как Nginx может использоваться в некоторых случаях вместо Apache для повышения производительности.
- «Nginx vs Apache: Our view» — это статья, написанная разработчиками Nginx о различиях между веб-серверами.
- «Rate Limiting with Nginx» описывает, как предотвратить взлом паролей методом грубой силы, используя ограничения скорости Nginx.
- «Nginx with dynamic upstreams» — это важная памятка по настройке вышестоящих серверов WSGI, если вы используете Nginx в качестве обратного прокси-сервера с изменяющимися именами хостов.
- В статье «Nginx Caching» показано, как настроить Nginx для кэширования HTTP-запросов, что часто делается при помощи Varnish, но также может быть обработано Nginx с помощью
proxy_cache
и связанных с ней директив. - «Dynamic log formats in nginx» объясняет, как использовать модуль HttpSetMiscModule, предоставляющий ряд утилит для кодирования/декодирования/хэширования любой переменной, которую вы можете использовать в nginx.
- «Detecting Bots in Apache & Nginx Logs» — это великолепное руководство, в котором показано, как отфильтровывать веб-сканеры и ботов из журналов трафика при их использовании для анализа веб-трафика.