Void Linux обрабатывает сервисы иначе, чем большинство дистрибутивов. Вместо того, чтобы систематизироваться, он использует runit, что означает, что включение и управление Nginx следует другой схеме, чем то, к чему вы привыкли на Debian или RHEL.
Предварительные условия
- Сервер под управлением Void Linux.
- Привилегии пользователя: пользователь root или не root с привилегиями sudo.
Конвенции
| |
Обновите систему
Свежая установка Void Linux требует обновления пакетов до последних доступных версий.
| |
После того, как xbps включен, запустите полное обновление системы.
| |
Система может нуждаться в перезагрузке после обновления.
| |
Установите Nginx Web Server
Установите пакет Nginx из хранилища Void:
| |
Подтвердите установленную версию:
| |
На выходе должна быть показана версия 1.28.3 или новее:
| |
Void Linux использует runit вместо системного. Чтобы включить услугу, вы создаёте симлинк из /etc/sv/ в /var/service/. Runit поднимает его автоматически в течение нескольких секунд.
| |
Дайте ему пару секунд, затем убедитесь, что Nginx работает:
| |
На выходе должна отображаться услуга с PID и временем безотказной работы:
| |
Настройка Nginx
Void Linux поставляется с Nginx с минимальной конфигурацией по умолчанию. Замените его готовой к производству конфигурацией, которая включает в себя правильные настройки рабочего, сжатие gzip и блок сервера, указывающий на пользовательский корень документа.
| |
Void Linux не создает корень документа по умолчанию для Nginx, поэтому его нужно создавать вручную:
| |
Также создайте каталог conf.d для виртуальных конфигураций хоста и каталог журнала:
| |
Проверьте синтаксис конфигурации и перезагрузите.
| |
Тестирование страницы Default
Создайте простую HTML-страницу в корне документа, чтобы подтвердить, что Nginx обслуживает файлы правильно.
| |
Испытайте его с помощью curl:
| |
Ответ должен содержать вашу тестовую страницу HTML:
| |
Если вы видите выход HTML, Nginx обслуживает контент из /srv/www/nginx, как и ожидалось.
Настройка PHP-FPM
Большинство веб-приложений (WordPress, MediaWiki, Nextcloud) требуют PHP. На Void Linux PHP-FPM работает как отдельный сервис, на который Nginx пересылает запросы.
Установите PHP-FPM вместе с обычно необходимыми расширениями:
| |
PHP-FPM 8.4 на Void Linux прослушивает 127.0.0.1:9000 по умолчанию и работает под _phpfpm пользователем и группой. Никаких изменений в конфигурации не требуется для стандартной настройки.
Включите службу PHP-FPM:
| |
Убедитесь, что сервис работает:
| |
Ожидаемый результат:
| |
Расширения установлены, но не включены автоматически. PHP на Void считывает дополнительные файлы конфигурации из /etc/php8.4/conf.d/. Создайте этот каталог и включите расширения:
| |
После установки каждому расширению требуется активировать файл *.ini в каталоге conf.d:
| |
Проверьте, загружаются ли расширения:
| |
Все три модуля, связанные с MySQL:
| |
Перезагрузите Nginx еще раз, чтобы получить новые расширения:
| |
Теперь настройте Nginx для передачи запросов PHP на PHP-FPM. Откройте основной файл конфигурации и добавьте блок местоположения для PHP в блок сервера:
| |
Добавить следующий блок расположения внутри раздела server { } после существующего location / блока:
| |
Также обновите директиву index в блоке сервера, чтобы включить index.php:
| |
Проверьте синтаксис конфигурации и перезагрузите.
| |
Создайте страницу информации PHP для проверки работы интеграции:
| |
Проверьте:
| |
Вы должны увидеть выход HTML, содержащий информацию о версии PHP. Если вы получаете пустую страницу или «Файл не найден», дважды проверьте, что SCRIPT FILENAME использует $document root и что /srv/www/nginx/info.php существует.
Удалите страницу с информацией после подтверждения работы PHP. Оставить его открытым - это риск безопасности:
| |
Виртуальные хосты Nginx
Чтобы обслуживать несколько веб-сайтов из одного экземпляра Nginx, используйте отдельные блоки сервера. Основной nginx.conf уже включает в себя /etc/nginx/conf.d/*.conf, поэтому каждый виртуальный хост получает свой собственный файл в этом каталоге.
Создайте виртуальную конфигурацию хоста для выборочного домена:
| |
Создайте виртуальную конфигурацию хоста для выборочного домена:
| |
Для дополнительных доменов повторите процесс: создайте новый файл .conf в /etc/nginx/conf.d с соответствующими директивами server name и root. Каждый сайт остается изолированным в своем собственном файле конфигурации, что делает обслуживание простым
Тестирование и перезагрузка после добавления виртуального хоста:
| |
SSL/TLS с функцией Let’s Encrypt
Установите Certbot и его плагин Nginx.
| |
Получить сертификат. Certbot автоматически изменит блок вашего сервера, чтобы включить HTTPS и настроить перенаправление с HTTP.
| |
Следуйте интерактивным подсказкам. Certbot создает файлы сертификатов под /etc/letsencrypt/live/example.com/ и вводит в конфигурацию директивы ssl certificate и ssl certificate key.
Тестирование процесса обновления без внесения изменений.
| |
Если вы предпочитаете ручную конфигурацию SSL без изменения файлов Certbot, сгенерируйте сертификат с помощью флага certonly и настройте блок сервера самостоятельно.
| |
Затем обратитесь к сертификату в блоке сервера.
| |
Заголовки безопасности
Заголовки безопасности защищают ваших посетителей от распространенных веб-атак. Добавьте их в блок сервера или в общий файл фрагмента, который вы включаете с каждого виртуального хоста.
| |
После добавления этих заголовков используйте такой инструмент, как curl -I https://example.com, чтобы убедиться, что они отправляются правильно. Настройка политики безопасности контента в соответствии с вашим приложением. Чрезмерно ограничительная политика нарушает функциональность; чрезмерно разрешительная политика снижает защиту.
Ограничение ставок и лимиты подключения
Ограничение скорости защищает ваш сервер от грубых атак и оскорбительного трафика. Определите общую зону памяти в блоке http, затем нанесите ее в определенные места.
| |
Применяйте ограничения внутри вашего сервера или блоков местоположения.
| |
Параметр burst очередей излишних запросов, а не отклоняет их немедленно. Добавление процессов nodelay без задержек разрывает запросы, но по-прежнему считает их против ставки. При заполнении очереди Nginx возвращает статус 503.
Вы можете настроить ответ на ошибку для запросов с ограниченной скоростью.
| |
Журналы доступа и журналы ошибок
Nginx по умолчанию записывает два файла журнала: журнал доступа, записывающий каждый запрос, и журнал ошибок, фиксирующий предупреждения и сбои. Вы можете настроить формат журнала и путь на виртуальный хост.
| |
Применяйте пользовательский формат к конкретному виртуальному хосту.
| |
Уровни журнала ошибок от наименее до наиболее многословных: emerg, alert, crit, error, warning, notice, info, debug. Для производства warn или error - это хороший баланс между видимостью и шумом.
Чтобы отключить регистрацию доступа для определенных путей (например, проверки здоровья), используйте этот шаблон.
| |
Настройте вращение журнала с помощью logrotate (уже настроенного пакетом Nginx) или проверьте существующую конфигурацию.
| |
Тюнинг производительности
Конфигурация Nginx по умолчанию работает для легких рабочих нагрузок. При более интенсивном трафике настройки этих параметров в /etc/nginx/nginx.conf. Конф делает измеримую разницу.
| |
Проверьте синтаксис конфигурации и перезагрузите.
| |
Завершение
Это руководство охватывало производственную установку Nginx с нуля на Void Linux.
Вы установили последнюю стабильную сборку из официального репозитория Nginx, настроили виртуальные хосты, интегрировали PHP-FPM, автоматизировали сертификаты TLS с Let’s Encrypt, включили HTTP/2 и HTTP/3, затвердели сервер с заголовками безопасности и ограничением скорости, настроили сжатие и производительность.
Nginx - лучший выбор для обратного прокси-сервера, обслуживания статического контента и обработки высокой параллели. Apache имеет больше смысла, если вам нужна поддержка .htaccess или вы мигрируете устаревшее приложение, которое зависит от правил mod_rewrite.