Cómo configurar Apache y PHP para sitios web de alto tráfico en un servidor Linux

Casi todos los tutoriales sobre cómo instalar la pila LAMP (Linux, Apache, MySQL, PHP) recomendarán que use el módulo Apache incorporado para procesar scripts PHP. Por ejemplo, en Ubuntu habilitaría esto cuando use un comando como sudo apt install libapache2-mod-phppara instalar un paquete. Esto a su vez obligaría a Apache a usar mpm_prefork. Cada vez que un visitante acceda a su sitio web, se iniciará un nuevo proceso para manejar esa conexión. Esto funciona bien cuando el tráfico es bajo.

Pero, se convierte en un gran problema si tienes un repentino estallido de tráfico. Por ejemplo, una publicación de Reddit puede incluir su sitio web, y si la publicación se vuelve popular, puede obtener miles de visitantes en solo unos minutos.

En el mejor de los casos, si Apache es capaz de manejar la ráfaga de tráfico, algunos visitantes desafortunados tendrán que esperar entre treinta y sesenta segundos hasta que se cargue la página, lo cual es absurdo en el mundo actual. En el peor de los casos, el servidor comenzará a retrasarse mucho y algunas conexiones simplemente se interrumpirán debido a la falta de recursos. En este caso, los visitantes verán un error en sus navegadores.

De todos modos, no es un buen escenario, ya que podría perder la atención de cientos o miles de lectores, clientes o fanáticos interesados.

Desafortunadamente, PHP es un gran consumidor de recursos de cualquier manera. Pero con mpm_event, Apache puede manejar ráfagas repentinas de tráfico de una manera mucho más eficiente. Sin embargo, se recomienda que su servidor tenga al menos 2 GB de RAM y 2 núcleos de CPU, reales o virtuales, e incluso más si espera tener picos de tráfico intensos, como más de diez visitantes por segundo. Si está utilizando un servidor privado virtual, agregue más núcleos de CPU virtuales a su situación y almacenamiento SSD. La RAM es secundaria.

Cómo usar Apache MPM Event y PHP-FPM en distribuciones basadas en Debian

En Debian, Ubuntu u otras distribuciones de esta familia simplemente evita instalar el paquete “libapache2-mod-php”. Cuando instala Apache, utiliza el evento MPM de forma predeterminada. Pero al instalar el paquete mencionado, un script deshabilita el evento MPM y habilita la bifurcación previa de MPM. El módulo Apache PHP solo puede funcionar (de forma segura) con mpm_prefork. Por supuesto, sin «libapache2-mod-php», no tiene procesador para archivos PHP. Entonces usará PHP-FPM en lugar del módulo PHP incluido en Apache. Así es como instalaría una pila LAMP en un servidor nuevo. Puede adaptar los pasos según los requisitos de su aplicación web.

Primero, inicie sesión como root. Luego, instale Apache.

apt update && apt install apache2

En este punto, puede ver que Apache sí se envía con el evento MPM habilitado de manera predeterminada.

Apache Php Fpm Comprobar Mpm Debian

Instalar PHP-FPM.

Verá instrucciones sobre cómo habilitar el procesador PHP en Apache.

Apache Php Fpm Habilitar instrucciones Php

Habilite el protocolo FastCGI.

Habilite la configuración predeterminada de PHP-FPM para Apache.

Nota: en futuras versiones de Debian/Ubuntu, este comando podría cambiar a otra cosa, por ejemplo a2enconf php7.6-fpmporque PHP-FPM sería una versión diferente.

Reinicie Apache.

systemctl restart apache2

Instale el resto de sus requisitos para su aplicación PHP. Aquí hay un ejemplo:

apt install mariadb-server php-mysql

Esto instalaría un servidor de base de datos y el módulo PHP MySQL para que su aplicación PHP pueda conectarse a una base de datos.

Cómo usar Apache MPM Event y PHP-FPM en distribuciones basadas en RedHat

La otra opción popular de distribución de servidores es RedHat o CentOS. De la misma manera que arriba, se ofrecerá un ejemplo de una instalación limpia de Apache con el evento MPM habilitado y PHP-FPM.

Inicie sesión como root e instale Apache.

A diferencia de las distribuciones basadas en Debian, aquí verá que Apache usa MPM prefork de forma predeterminada, al menos en el último CentOS 7 disponible en el momento de escribir este artículo.

Apache Php Fpm Comprobar Mpm Centos

Para habilitar el evento MPM, debe editar un archivo de configuración.

sed -i '/mpm_prefork\.so$/s/^/#/' /etc/httpd/conf.modules.d/00-mpm.conf

Esto agregará un # firmar para comentar (desactivar) la línea LoadModule mpm_prefork_module modules/mod_mpm_prefork.so.

Apache Php Fpm Mpm Conffile en Centos

Ahora descomentar (activar) la línea #LoadModule mpm_event_module modules/mod_mpm_event.so eliminando lo anterior # firmar con el siguiente comando.

sed -i '/mpm_event\.so$/s/^#//' /etc/httpd/conf.modules.d/00-mpm.conf

Inicie Apache y habilítelo para que se inicie automáticamente al arrancar.

systemctl start httpd.service
systemctl enable httpd.service

Compruebe si Apache ahora usa el evento MPM.

Apache Php Fpm Mpm Evento Habilitado Estado Centos

Instale el módulo PHP-FPM y FastCGI.

yum install php-fpm mod_fcgid

Cree “/etc/httpd/conf.d/php.conf” para instruir a Apache sobre cómo procesar archivos PHP. Copie TODO el contenido a continuación y péguelo todo a la vez en la terminal, luego presione ENTER.

cat <<PASTE > /etc/httpd/conf.d/php.conf
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
# Enable http authorization headers
<IfModule setenvif_module>
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</IfModule>
 
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
#SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
<FilesMatch ".+\.phps$">
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
Require all denied
</FilesMatch>
</IfModule>
</IfModule>
PASTE

El crédito por esta gran configuración es para Debian. Otras fuentes recomiendan un archivo de configuración simple como:

<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

Pero esto es vulnerable a algunos ataques, y si ciertos servicios fallan, puede exponer los archivos PHP al público, lo que a su vez podría exponer las contraseñas almacenadas, el código y los datos confidenciales.

Reinicie Apache.

systemctl restart httpd.service

Inicie PHP-FPM y habilite su inicio automático en el arranque.

systemctl start php-fpm.service
systemctl enable php-fpm.service

Conclusión

Ahora tiene un servidor Apache que escala mucho mejor con el tráfico. Sin embargo, recuerde que está utilizando la configuración predeterminada, como lo que es «mejor» para la mayoría de las personas. Si realmente desea aprovechar al máximo su servidor HTTP, debe leer acerca de las diversas variables que puede ajustar. Los valores correctos para estos dependen en gran medida de los recursos de su servidor, el tráfico esperado y la aplicación PHP.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *