Миграция с nginx на Angie#

Если вы переходите с nginx на Angie, поздравляем! У нас есть руководство для вас.

Имейте в виду, что оно предназначено для базового сценария замены, который полагается на пакетную версию Angie. Если вы работаете с контейнерами, виртуальными машинами, нестандартными путями или модулями, вам потребуется дополнительная подстройка.

Установка Angie#

Рекомендуем использовать официальные пакеты из наших репозиториев; см. шаги по установке Angie для вашего дистрибутива. Пока не запускайте сервер; вместо этого проверьте его командой sudo angie -V:

$ sudo angie -V

  Angie version: Angie/1.7.0
  nginx version: nginx/1.27.1
  built by gcc 11.4.0
  configure arguments: --prefix=/etc/angie --conf-path=/etc/angie/angie.conf ...

Как следует отсюда, конфигурация находится в /etc/angie/, когда Angie устанавливается из пакета.

Обновление конфигурации Angie#

Angie обычно требует минимальных изменений в существующей конфигурации nginx.

  1. Скопируйте конфигурацию nginx в /etc/angie/ целиком:

    $ sudo rsync -a --no-links /etc/nginx/ /etc/angie/
    

    Предположим, конфигурация nginx хранится в /etc/nginx/; измените шаги, если у вас другой путь.

  2. Переименуйте основной файл конфигурации так, как ожидает Angie:

    $ sudo mv /etc/angie/nginx.conf /etc/angie/angie.conf
    
  3. Поправьте пути во всей конфигурации Angie, начиная с основного файла конфигурации. Детали зависят от того, как был установлен nginx, но, по крайней мере, необходимо обновить следующее.

    Любые пути include, которые пока указывают на /etc/nginx/:

    # include /etc/nginx/conf.d/*.conf;
    # include /etc/nginx/default.d/*.conf;
    # include /etc/nginx/http.d/*.conf;
    # include /etc/nginx/stream.d/*.conf;
    include /etc/angie/conf.d/*.conf;
    include /etc/angie/default.d/*.conf;
    include /etc/angie/http.d/*.conf;
    include /etc/angie/stream.d/*.conf;
    
    # include /etc/nginx/sites-enabled/*;
    include /etc/angie/sites-enabled/*;
    
    # include /etc/nginx/modules-enabled/*;
    include /etc/angie/modules-enabled/*;
    
    # include /etc/nginx/mime.types;
    include /etc/angie/mime.types;
    

    Файл PID, который важен для управления процессами Angie:

    # pid /var/run/nginx.pid;
    # -- или --
    # pid /run/nginx.pid;
    pid /run/angie.pid;
    

    Наконец, журнал обращений и журнал ошибок:

    # access_log /var/log/nginx/access.log;
    access_log /var/log/angie/access.log;
    
    # error_log /var/log/nginx/error.log;
    error_log /var/log/angie/error.log;
    

Виртуальные хосты#

Если для включения виртуальных хостов используется директория sites-enabled/, поправьте и ее:

# include /etc/nginx/sites-enabled/*;
include /etc/angie/sites-enabled/*;

Затем воссоздайте символические ссылки в /etc/angie/sites-enabled/, чтобы все работало.

Перечислите исходные файлы виртуальных хостов, например:

$ ls -l /etc/nginx/sites-enabled/

  default -> /etc/nginx/sites-available/default

Обратите внимание на их фактическое расположение; здесь это /etc/nginx/sites-available/.

Если вы не копировали их ранее в /etc/angie/, скопируйте сейчас:

$ sudo rsync -a /etc/nginx/sites-available/ /etc/angie/sites-available/

Наконец, воссоздайте каждую символическую ссылку:

$ sudo ln -s /etc/angie/sites-available/default \
             /etc/angie/sites-enabled/default

Динамические модули#

Найдите и установите используемые в Angie аналоги для всех динамических модулей, упомянутых в конфигурации nginx, например:

$ sudo nginx -T | grep load_module

  load_module modules/ngx_http_geoip2_module.so;
  load_module modules/ngx_stream_geoip2_module.so;
  ...

Это означает, что вам нужно установить пакет angie-module-geoip2, и так далее.

Есть два популярных способа включения конфигурации динамических модулей:

Если динамические модули включены через /usr/share/nginx/modules/, поправьте путь:

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
# include /usr/share/nginx/modules/*.conf;

include /usr/share/angie/modules/*.conf;

Затем скопируйте файлы конфигурации модулей:

$ sudo rsync -a /usr/share/nginx/modules/ /usr/share/angie/modules/

Наконец, измените путь load_module в каждом файле:

# load_module "/usr/lib64/nginx/modules/ngx_http_geoip2_module.so";
load_module "/usr/lib64/angie/modules/ngx_http_geoip2_module.so";

Корневая директория (необязательно)#

Если root указывает на директорию /usr/share/nginx/html/, можно изменить директиву, указав на Angie.

Скопируйте директорию и исправьте значение root в конфигурации Angie:

$ sudo rsync -a /usr/share/nginx/html/ /usr/share/angie/html/
# root /usr/share/nginx/html;
root /usr/share/angie/html;

Пользователь и группа (необязательно)#

Хотя директиву user достаточно оставить как есть, для гибкости можно использовать учетные записи Angie.

Поправьте настройки user в конфигурации Angie:

# user www-data www-data;
user angie angie;

Измените владельца всех файлов конфигурации, включая файлы в /usr/share/angie/, например:

$ sudo chown -R angie:angie /etc/angie/
$ sudo chown -R angie:angie /usr/share/angie/

Если в конфигурации Angie есть директивы root, измените владельца указанных там директорий, например:

$ sudo chown -R angie:angie /var/www/html/

Завершение#

Чтобы ничего не пропустить, найдите и исправьте оставшиеся упоминания nginx в конфигурации Angie:

$ grep -rn --include='*.conf' 'nginx' /etc/angie/

Тестирование и переключение#

Обновив конфигурацию Angie, следующим шагом проверьте ее синтаксис, чтобы убедиться, что Angie может с ней работать, а затем переключиться. Проверьте, что Angie воспринимает новую конфигурацию:

$ sudo angie -t

Эта команда анализирует конфигурацию и сообщает об ошибках, которые блокируют запуск Angie; исправьте все проблемы и перезапустите команду.

Остановка nginx, запуск Angie#

Чтобы минимизировать простой, запустите Angie сразу после остановки nginx:

$ sudo systemctl stop nginx && sudo systemctl start angie

При необходимости включите службу Angie для запуска после перезагрузки:

$ sudo systemctl enable angie

Миграция завершена! На этом все; вы великолепны.

Отключение nginx#

Убедившись, что Angie работает стабильно, можно отключить или удалить nginx, чтобы избежать конфликтов.

Минимум того, что вы можете сделать, — это отключить службу:

$ sudo systemctl disable nginx

Настройка функций Angie#

Можно предположить, что миграция нужна вам не просто так. Почему бы не пойти дальше и не настроить некоторые из дополнительных функций, которые есть в Angie, но нет в nginx?