NGINX Unit — это легкий и универсальный сервер с открытым исходным кодом, который имеет две основные возможности:
обслуживает статические медиаресурсы,
запускает код приложения на восьми языках.
Unit объединяет несколько уровней современного стека приложений в мощное, согласованное решение с упором на производительность, низкую задержку и масштабируемость. Он задуман как универсальный строительный блок для любой веб-архитектуры, независимо от ее сложности, от развертываний в масштабе предприятия до домашней страницы вашего питомца.
Его собственный RESTful JSON API обеспечивает динамические обновления без перерывов и гибкую настройку, а его готовая к использованию производительность надежно масштабируется до рабочих нагрузок производственного уровня. Мы достигаем этого с помощью сложной асинхронной многопоточной архитектуры, состоящей из нескольких процессов, обеспечивающей безопасность и надежность и позволяющей максимально эффективно использовать возможности современных вычислительных платформ.
Выполните следующую команду, чтобы установить unitd
(демон Unit) и unitctl
(инструмент управления).
$ Brew установить nginx/unit/unit
Подробности и доступные языковые пакеты см. в документации.
$ docker pull unit:$ mkdir /tmp/unit-control # настройте по мере необходимости.$ docker run -d --mount type=bind,src=/tmp/unit-control,dst=/var/run --mount type=bind,src=.,dst=/www --network хост unit
Описание тегов изображений см. в документации.
ВНИМАНИЕ: последний тег изображения может не поддерживать определенные языковые модули. Прежде чем извлекать изображение, проверьте доступные теги изображения по ссылке выше.
Ваш текущий рабочий каталог теперь будет подключен к образу модуля по адресу /www
. Вы можете получить доступ к его сокету по адресу /tmp/unit-control/control.unit.sock
при условии, что никаких дополнительных настроек не было сделано.
Этот вспомогательный сценарий настраивает правильные репозитории пакетов для системы.
$ wget https://raw.githubusercontent.com/nginx/unit/master/tools/setup-unit && chmod +x setup-unit# ./setup-unit repo-config
Производные Debian:
# подходящий модуль установки
Производные Fedora:
# ням установка модуля
Подробности и доступные языковые пакеты см. в документации.
unitctl
unitctl
упрощает управление процессами NGINX Unit с помощью простого в использовании интерфейса командной строки. Чтобы начать работу с unitctl
, загрузите его из официальных выпусков GitHub или Homebrew.
Примечание
Если вы установили Unit с Homebrew, вы можете пропустить этот шаг, поскольку unitctl
включен по умолчанию.
Загрузите соответствующий двоичный файл unitctl
для вашей системы из выпусков модуля NGINX.
$ tar xzvf unitctl-master-x86_64-unknown-linux-gnu.tar.gz# mv unitctl /usr/local/bin/
Если на вашем компьютере установлен Docker, вы можете легко запустить один из официальных образов Docker Unit вместе с вашим приложением.
Кончик
Практические руководства и руководства по настройке доступны на unit.nginx.org для платформ веб-приложений, созданных с использованием Python, PHP, WebAssembly, Node.js, Ruby и других.
Вот пример использования образа Docker unit:python
:
$ unitctl экземпляры new 127.0.0.1:8001 /path/to/app 'unit:python'
/path/to/app
будет подключен к /www
в файловой системе Docker.
Сохраните это в /path/to/app/wsgi.py
:
def application(environ, start_response): start_response("200 OK", [("Content-Type", "text/plain")]) return (b"Привет, Python на модуле!")
Затем вы можете в интерактивном режиме редактировать текущую активную конфигурацию:
$ unitctl редактировать
{ "listeners": { "*:8000": { // Указываем прослушиватель на новое приложение "pass": "applications/python" } }, // Добавляем определение приложения "applications": { "python": { "type ": "python", "path": "/www/", "module": "wsgi" } }}
Действительные конфигурации будут применены после сохранения и закрытия.
$ curl localhost:8000Привет, Python в Unit!
Дополнительные примеры конфигурации Python можно найти в документации Unit.
Unit запускает приложения на разных языках. Давайте рассмотрим настройку простого PHP-приложения на Unit с помощью curl
.
Предположим, вы сохранили PHP-скрипт как /www/helloworld/index.php
:
Чтобы запустить его на Unit с установленным модулем unit-php
, сначала настройте объект приложения. Давайте сохраним наш первый фрагмент конфигурации в файле с именем config.json
:
{ "helloworld": { "type": "php", "root": "/www/helloworld/" } }
Сохранять его в файл не обязательно, но может пригодиться для более крупных объектов.
Теперь PUT
его в раздел /config/applications
API управления Unit, который обычно доступен по умолчанию через сокет домена Unix:
# curl -X PUT --data-binary @config.json --unix-socket /path/to/control.unit.sock http://localhost/config/applications
{"успех": "Реконфигурация завершена."}
Затем создайте ссылку на приложение из объекта прослушивателя в разделе /config/listeners
API. На этот раз мы передаем фрагмент конфигурации прямо из командной строки:
# curl -X PUT -d '{"127.0.0.1:8080": {"pass": "applications/helloworld"}}' --unix-socket /path/to/control.unit.sock http:// локальный хост/конфигурация/слушатели
{ "успех": "Реконфигурация завершена."}
Теперь Unit принимает запросы по указанному IP и порту, передавая их процессу приложения. Ваше приложение работает!
$ curl 127.0.0.1:8080 Привет, PHP на Unit!
Наконец, запросите весь раздел /config
API управления:
# curl --unix-socket /path/to/control.unit.sock http://localhost/config/
Вывод модуля должен содержать оба аккуратно организованных фрагмента:
{ "слушатели": { "127.0.0.1:8080": { "pass": "applications/helloworld" } }, "applications": { "helloworld": { "type": "php", "root": "/www/helloworld/" } } }
Модуль поддерживает запуск компонентов WebAssembly (WASI 0.2). Дополнительную информацию см. в документации по конфигурации устройства.
Наша спецификация OpenAPI призвана упростить настройку и интеграцию развертываний модулей NGINX и предоставить авторитетный источник знаний об API управления.
Лучшее место, где можно начать задавать вопросы и делиться своими мыслями, — это обсуждения на GitHub.
На нашей странице проблем на GitHub есть место для более технических обсуждений в удобном для вас темпе.
Карта проекта на GitHub проливает свет на нашу текущую работу и планы на будущее.
На нашем официальном сайте могут быть ответы, которые нелегко найти иначе.
Примите участие в проекте, внося свой вклад! Подробности смотрите в руководстве по участию.
Чтобы напрямую связаться с командой, подпишитесь на список рассылки.
По вопросам безопасности напишите нам, упомянув NGINX Unit в теме и следуя спецификации CVSS v3.1.