Migración desde nginx#

Esta guía sustituye un nginx instalado por paquete por un Angie instalado por paquete en el mismo host, conservando la configuración, los hosts virtuales, los módulos dinámicos y los certificados. Da por hecho que nginx se instaló desde un paquete de la distribución con su configuración en /etc/nginx/, y que Angie procede de los paquetes oficiales. La mayoría de las directivas de nginx funcionan en Angie sin cambios; las excepciones se enumeran en Directivas de nginx no admitidas y se tratan más abajo. Los contenedores y las compilaciones con rutas personalizadas necesitan ajustes que esta guía no cubre.

Instalación de Angie#

Instale Angie desde los paquetes oficiales de su distribución, pero omita los pasos de inicio y habilitación: nginx todavía ocupa los puertos 80 y 443. En Debian y Ubuntu, el paquete inicia el servicio por sí mismo, y ese intento no consigue abrir los puertos mientras nginx está en ejecución; ese fallo es normal y no afecta a la instalación.

Confirme el binario:

$ sudo angie -v
Angie version: Angie/1.12.4

Los paquetes colocan la configuración en /etc/angie/ — angie.conf junto a los directorios http.d/ y stream.d/ y un enlace modules/ al directorio de módulos — y los registros en /var/log/angie/.

Copia y adaptación de la configuración#

Los pasos siguientes usan rsync; instale su paquete si el comando no está disponible.

  1. Copie toda la configuración de nginx a /etc/angie/:

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

    La opción --no-links omite los enlaces simbólicos e informa de cada uno que encuentra; más abajo recreará los de sites-enabled/ y modules-enabled/, y un enlace cuyo destino esté fuera de /etc/nginx/ necesita que su destino se copie por separado.

  2. Renombre el archivo de configuración principal como espera Angie:

    $ sudo mv /etc/angie/nginx.conf /etc/angie/angie.conf
    
  3. Actualice las rutas en toda la configuración de Angie, empezando por el archivo principal. Como mínimo:

    Cualquier ruta include que todavía apunte a /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/*.conf;
    include /etc/angie/modules-enabled/*.conf;
    
    # include /etc/nginx/mime.types;
    include /etc/angie/mime.types;
    

    La ruta de pid, que la unidad de servicio del paquete espera en /run/angie.pid:

    # pid /var/run/nginx.pid;
    # -- o --
    # pid /run/nginx.pid;
    pid /run/angie.pid;
    

    Las rutas del registro de acceso y del registro de errores:

    # 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;
    

Hosts virtuales#

Si los hosts virtuales se incluyen desde sites-enabled/, el include ya apunta a /etc/angie/ y los archivos en sí ya están copiados, pero no los enlaces simbólicos, que --no-links omitió. Recréelos.

Liste los originales y anote hacia dónde apuntan:

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

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

En este caso es /etc/nginx/sites-available/, dentro de /etc/nginx/, así que la copia de Angie ya está en su lugar. Si un destino está fuera de ese directorio, cópielo también a /etc/angie/.

Luego recree cada enlace simbólico apuntando a la copia de Angie:

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

Módulos dinámicos#

Localice los módulos dinámicos que carga la configuración de nginx:

$ sudo nginx -T | grep load_module

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

Para los módulos de terceros más populares publicamos paquetes: angie-module-name para Angie y angie-pro-module-name para Angie PRO. Los dos archivos .so de la salida anterior proceden del paquete angie-module-geoip2. Consulte la lista de paquetes e instale un paquete por cada módulo que liste el comando; un módulo que no esté en la lista debe compilarse para el Angie o el Angie PRO que tenga instalado.

Una ruta relativa de load_module como modules/ngx_http_geoip2_module.so se resuelve contra el prefijo /etc/angie, donde modules enlaza al directorio de módulos del paquete, así que no necesita cambios. Una ruta absoluta de nginx sí: reescríbala como /usr/lib/angie/modules/ en Debian y Ubuntu, o /usr/lib64/angie/modules/ en la familia RHEL. Sea cual sea su distribución, reescriba las rutas absolutas en los archivos de configuración de módulos que copie a continuación.

Las distribuciones enlazan la configuración de los módulos de una de estas dos formas:

Si los módulos dinámicos se incluyen a través de /usr/share/nginx/modules/, actualice la ruta:

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

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

Luego copie los archivos de configuración del módulo:

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

Directivas divergentes#

Angie declara obsoletas algunas directivas de nginx y omite otras pocas. Si su configuración depende de alguna de ellas, consulte Directivas de nginx no admitidas. Una directiva omitida hace que angie -t falle con un error de directiva desconocida; una obsoleta se acepta y registra una advertencia con el nombre de la directiva que debe usarse en su lugar.

La más habitual en configuraciones existentes es keepalive_min_timeout: Angie no la admite, así que elimínela.

Directorio raíz (opcional)#

Este paso solo se aplica si root apunta a /usr/share/nginx/html/. Copie el contenido al directorio de Angie:

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

Luego actualice la directiva:

# root /usr/share/nginx/html;
root /usr/share/angie/html;

Usuario y grupo (opcional)#

La directiva user indica la cuenta con la que se ejecutan los procesos de trabajo. Los paquetes de Angie crean una cuenta angie. La cuenta de nginx sigue funcionando, así que este paso es opcional; para cambiar los procesos de trabajo a la cuenta de Angie:

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

El proceso maestro analiza la configuración y lee los certificados y las claves como root, así que la propiedad de /etc/angie/ no cambia. Lo que necesitan los procesos de trabajo es acceso al contenido que sirven:

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

Si la configuración tiene directivas root que apuntan a otro lugar, cambie también el propietario de esos directorios:

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

Comprobación final#

Busque cualquier cosa que todavía apunte a nginx:

$ grep -rn nginx /etc/angie/

Revise cada coincidencia. Los comentarios y los archivos de parámetros de fábrica (fastcgi_params, scgi_params, uwsgi_params) mencionan nginx sin que importe; lo que importa son las rutas que todavía se resuelven bajo /etc/nginx/ o /var/log/nginx/.

Pruebas y cambio#

Compruebe que Angie acepta la configuración:

$ sudo angie -t

El comando carga los módulos dinámicos y analiza cada archivo incluido; corrija cada error notificado y vuelva a ejecutarlo hasta que no quede ninguno.

Parada de nginx e inicio de Angie#

Para minimizar el tiempo de inactividad, inicie Angie inmediatamente después de detener nginx:

$ sudo systemctl stop nginx && sudo systemctl start angie

Habilite el servicio para que se inicie tras un reinicio:

$ sudo systemctl enable angie

Confirme que la respuesta ahora proviene de Angie:

$ curl -I localhost
HTTP/1.1 200 OK
Server: Angie/1.12.4
...

Desactivación de nginx#

Una vez que Angie haya funcionado sin problemas, deshabilite nginx para que no recupere los puertos 80 y 443 tras un reinicio:

$ sudo systemctl disable nginx

Certificados#

Si Certbot gestionaba los certificados de nginx, sigue funcionando con Angie en cuanto se le indican las nuevas rutas.

Certbot#

El complemento --nginx de certbot busca nginx.conf en la raíz del servidor y recarga el servidor a través del binario de nginx. Apúntelo hacia Angie antes de la siguiente renovación.

Cree el nombre de archivo que espera el complemento:

$ sudo ln -s /etc/angie/angie.conf /etc/angie/nginx.conf

Vuelva a ejecutar el complemento para los dominios existentes, indicando la raíz del servidor y el binario de Angie; certbot almacena estos parámetros junto con el certificado y los reutiliza en la renovación:

$ sudo certbot --nginx --nginx-server-root=/etc/angie --nginx-ctl=angie -d example.com -d www.example.com

Verifique que una renovación tendría éxito:

$ sudo certbot renew --dry-run

Las renovaciones continúan a través del propio temporizador de Certbot.

Cliente ACME integrado#

Angie obtiene y renueva los certificados por sí mismo, sin necesidad de un cliente externo: HTTPS automático muestra la configuración, y Migración desde certbot explica cómo sustituir una configuración existente de Certbot.

Próximos pasos#

Lo que añade Angie y Angie PRO

Funciones que nginx no tiene, en la versión de código abierto y en la versión comercial.

Primeros pasos

HTTPS automático y la API de estadísticas en un ejemplo pequeño.

Módulos

La referencia de todas las directivas y variables, agrupadas por módulo.

Instrucciones

Guías paso a paso para tareas concretas: SSL, OIDC, clústeres, paneles de monitorización y métricas personalizadas.