GNU/Linux >> Tutoriales Linux >  >> FreeBSD

Migración de Apache a Nginx en FreeBSD

En este artículo, les contaré cómo he migrado mis servidores que ejecutan Apache+PHP a Nginx+PHP-fpm sin detener el proceso.

Escenario

[Saltar introducción]

En 2020, durante los primeros días de la pandemia, tuvimos una reunión de preparación para la próxima cuarentena. El plan era continuar moviendo a todos nuestros estudiantes presenciales a la educación remota completa. Pregunté cuántos estudiantes extra debo esperar y dijeron sobre el doble. A continuación, mi sugerencia fue simplemente duplicar los recursos de hardware (núcleos de RAM y CPU) porque:

  • Por suerte, tengo espacio suficiente, en términos de recursos de hardware, para ese tipo de crecimiento.
  • la cuarentena terminará en solo dos semanas, un mes como máximo. Luego, nuestros estudiantes volverán a la modalidad presencial y recuperaré esos recursos adicionales.

Durante las dos primeras semanas de la cuarentena original tuve que aumentar cada vez más los recursos de hardware (pero sin duplicarlos) y esa solución resultó insuficiente. Después del primer mes, con los exámenes cada día más cerca, y la crisis del covid19 amenazando con extenderse hasta el verano, tenía que pensar en una real solución. Además, esta solución debe hacerse con el menor tiempo de inactividad posible ... ya tuvimos suficientes caídas de Moodle.

Nuevamente, por suerte todavía tengo un par de Gbs de RAM y núcleos de CPU disponibles. Configuré una pequeña VM nueva (1 núcleo y 1 gb de RAM) con una copia de uno de mis moodles de producción, para probar las cosas hasta que funcionara. Una vez que obtenga la configuración que lo hace, podría realizar el cambio sin tiempo de inactividad. El cambio final consiste en apagar apache e iniciar nginx

La instalación

Nginx

Si leyó algunas de mis publicaciones anteriores en FreeBSD, prefiero los puertos sobre los paquetes binarios, así que para instalar nginx ejecute:

# cd /usr/ports/www/nginx
# make install clean

Php-fpm

La forma predeterminada de ejecutar el código php dentro de Apache es habilitar el módulo mod_php. No hay (al menos que yo sepa) un módulo cargable nginx para PHP, por lo que debe habilitar el Administrador de procesos fastCGI. Si instaló PHP con las opciones predeterminadas, probablemente ya lo tenga, pero verifique dos veces:

[/usr/ports/www/nginx]# cd ../../lang/php74
[/usr/ports/lang/php74]# make config

Si FPM no está seleccionado, selecciónelo y luego ejecute:

[/usr/ports/lang/php74]# make install clean

La configuración

PHP-Fpm

Cree, si no existe, el archivo /usr/local/etc/php-fpm.d/www.conf my copying www.conf.default y luego edite:

[/usr/ports/lang/php74]# cd /usr/local/etc/php-fpm.d/
[/usr/local/etc/php-fpm.d/]# cp www.conf.default www.conf
[/usr/local/etc/php-fpm.d/]# ee www.conf

Desplácese hacia abajo hasta las opciones relevantes:

  • user/group :debe ser el mismo usuario y grupo que apache, www para mí.
  • listen :como estoy sirviendo php solo localmente, estoy usando un socket de Unix:/var/run/php-fpm.sock;
  • pm :dynamic está bien, pero es posible que deba modificar y ajustar este parámetro. Eche un vistazo a los comentarios en el archivo.

Finalmente, habilitemos e iniciemos php-fpm:

[/usr/local/etc/php-fpm.d/] /usr/local/etc/rc.d/php-fpm enable
[/usr/local/etc/php-fpm.d/] /usr/local/etc/rc.d/php-fpm start

Nginx

El archivo nginx.conf podría ser tan grande (o estar dividido en tantas partes) como el httpd.conf de apache. En especial, si tiene varios VirtualHosts, las opciones relevantes son (al menos para mí dónde):

  • user :el mismo usuario que el proceso de apache, por ejemplo, www.
  • worker_process :esto debería coincidir con el número de núcleos de CPU
  • client_max_body_size :debe coincidir con los valores de post_max_size y upload_max_size en php.ini.
  • root :es igual a DocumentRoot desde su VirtualHost en apache httpd.conf, es decir, /usr/local/www/
  • Agregue la siguiente sección para decirle a nginx cómo enviar su código php al servicio php-fpm:
location ~ [^/]\.php(/|$) {
            fastcgi_split_path_info     ^(.+\.php)(/.+)$;
            fastcgi_index               index.php;
            fastcgi_pass                unix:/var/run/php-fpm.sock;
            include                     fastcgi_params;
            fastcgi_param  PATH_INFO    $fastcgi_path_info;
            fastcgi_param  SCRIPT_FILENAME      $document_root$fastcgi_script_name;
            fastcgi_read_timeout 120;
            fastcgi_send_timeout 120;
        }

Las otras opciones en el archivo de ejemplo nginx.conf se explican por sí mismas. Por supuesto, hay muchas otras cosas que puedes modificar, pero esta sería la magia.

Finalmente, podemos habilitar nginx, detener apache e iniciar nginx (en ese orden o nginx podría escuchar en los puertos http/https):

# /usr/local/etc/rc.d/nginx enable
# /usr/local/etc/rc.d/apache24 stop
# /usr/local/etc/rc.d/nginx start

Si algo sale mal

Tenga en cuenta que aún no deshabilitamos Apache. Si algo sale mal, simplemente detenga nginx e inicie apache24 para saber que ya estaba funcionando bien:

# /usr/local/etc/rc.d/apache24 stop ; /usr/local/etc/rc.d/nginx start

Cuando esté seguro de que todo funciona como se esperaba, puede desactivar apache.


FreeBSD
  1. nginx - 413 Entidad de solicitud demasiado grande

  2. Cómo instalar Nginx, MariaDB y PHP (FEMP) Stack en FreeBSD

  3. Cómo instalar Apache, MariaDB y PHP (FAMP) Stack en FreeBSD

  4. ¿Cómo degradar Php de 5.3.x a 5.2.x?

  5. Instalación de Web Server en FreeBSD 6.0 con Apache 2.2, MySQL 5.0 y PHP 5 – Parte 5

Instale Nginx + MariaDB + PHP en Fedora 27 / Fedora 26

Cómo crear un servidor de streaming en FreeBSD

Cómo proteger Apache con SSL y Let's Encrypt en FreeBSD

Instalación de Apache y PHP en CentOS 8

Cómo instalar FAMP (FreeBSD 10, Apache, MySQL, PHP) en una nube o servidor VPS

Cómo instalar FEMP (FreeBSD 10, Nginx, MySQL, PHP) en una nube o servidor VPS