El autor seleccionó el COVID-19 Relief Fund para que reciba una donación como parte del programa Write for DOnations.
El servidor web Apache utiliza hosts virtuales para gestionar varios dominios en una sola instancia. De forma similar, PHP-FPM utiliza un demonio para gestionar varias versiones de PHP en una sola instancia. Puede usar Apache y PHP-FPM en conjunto para alojar varias aplicaciones web PHP, cada una con una versión distinta de PHP, en un mismo servidor al mismo tiempo. Esto es útil porque diversas aplicaciones pueden requerir distintas versiones de PHP, pero algunas pilas de servidores, como una pila LAMP configurada periódicamente, solo pueden gestionar una. Combinar Apache con PHP-FPM también es una solución más rentable que alojar cada aplicación en su propia instancia.
PHP-FPM también ofrece opciones de configuración para los registros stderr
y stdout
, reinicios de emergencia y creación de procesos adaptativos, lo que es útil para sitios muy cargados. De hecho, Apache y PHP-FPM representan una de las mejores pilas para alojar aplicaciones PHP, en especial en términos de rendimiento.
En este tutorial, establecerá dos sitios PHP en una sola instancia. Cada sitio usará su propio dominio y cada dominio implementará su propia versión de PHP. El primero, site1.your_domain
, implementará PHP 7.0. El segundo, site2.your_domain
, implementará PHP 7.2.
A
en nuestra configuración de DNS: site1.your_domain
y site2.your_domain
.Ahora, con los requisitos previos completos, instalará las versiones 7.0 y 7.2 de PHP, así como PHP-FPM y varias extensiones adicionales. Pero, para poder hacerlo, primero, deberá añadir el repositorio Ondrej PHP
a su sistema.
Ejecute el comando apt-get
para instalar software-properties-common
:
El paquete software-properties-common
proporciona la utilidad de línea de comandos apt-add-repository
, que usará para añadir el repositorio de PPA (archivo de paquete personal) ondrej/php
.
Ahora, añada el repositorio ondrej/php
a su sistema. El PPA ondrej/php
tendrá versiones más actualizadas de PHP que los repositorios oficiales de Ubuntu y también le permitirá instalar varias versiones de PHP en el mismo sistema:
Actualice el repositorio:
A continuación, instale php7.0
, php7.0-fpm
, php7.0-mysql
, libapache2-mod-php7.0
, y libapache2-mod-fcgid
con los siguientes comandos:
php7.0
es un metapaquete que se utiliza para ejecutar aplicaciones de PHP.php7.0-fpm
ofrece el intérprete Fast Process Manager, que se ejecuta como demonio y recibe solicitudes de Fast/CGI.php7.0-mysql
conecta PHP con la base de datos de MySQL.libapache2-mod-php7.0
ofrece el módulo PHP para el servidor web de Apache.libapache2-mod-fcgid
contiene un mod_fcgid que inicia varias instancias de programas de CGI para gestionar solicitudes simultáneas.Ahora, repita el proceso para la versión 7.2 de PHP. Instale php7.2
, php7.2-fpm
, php7.2-mysql
y libapache2-mod-php7.2
:
Después de instalar las dos versiones de PHP, inicie el servicio php7.0-fpm
:
A continuación, verifique el estado del servicio php7.0-fpm
:
Verá el siguiente resultado:
Output● php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-03-29 12:53:23 UTC; 15s ago
Docs: man:php-fpm7.0(8)
Process: 20961 ExecStopPost=/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/7.0/fpm/pool.d/www.conf 70 (code=exited,
Process: 20979 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.0/fpm/pool.d/www.conf 70 (code=exite
Main PID: 20963 (php-fpm7.0)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1150)
CGroup: /system.slice/php7.0-fpm.service
├─20963 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
├─20977 php-fpm: pool www
└─20978 php-fpm: pool www
Ahora, repitiendo el proceso, inicie el servicio php7.2-fpm
:
Verifique el estado del servicio php7.2-fpm
:
Verá el siguiente resultado:
Output● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-03-29 12:53:22 UTC; 45s ago
Docs: man:php-fpm7.2(8)
Main PID: 20897 (php-fpm7.2)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1150)
CGroup: /system.slice/php7.2-fpm.service
├─20897 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
├─20909 php-fpm: pool www
└─20910 php-fpm: pool www
Por último, debe habilitar varios módulos para que su servicio de Apache2 pueda funcionar con varias versiones de PHP:
actions
se utiliza para ejecutar secuencias de comandos de CGI en función del tipo de medio o el método de solicitud.
fcgid
es una alternativa de alto rendimiento de mod_cgi
que inicia una suficientes instancias del programa de CGI para gestionar solicitudes simultáneas.
alias
proporciona la asignación de las distintas partes del sistema de archivos del host en el árbol de documentos y la redirección de URL.
proxy_fcgi
le permite a Apache reenviar solicitudes a PHP-FPM.
Ahora, reinicie el servicio de Apache para aplicar los cambios:
En este punto, instaló dos versiones de PHP en su servidor. A continuación, creará una estructura de directorios para cada sitio web que desee implementar.
En esta sección, creará un directorio root de documentos y una página de índice para cada uno de sus dos sitios web.
Primero, cree directorios root de documentos para site1.your_domain
y site2.your_domain
:
De manera predeterminada, el servidor web Apache se ejecuta como usuario www-data
y grupo www-data
. Para asegurarse contar con la propiedad y los permisos correctos de sus directorios root del sitio web, ejecute los siguientes comandos:
A continuación, creará un archivo info.php
en el directorio root de cada sitio web. Con esto, se mostrará la información de la versión de PHP de cada sitio web. Comience con site1
:
Añada la siguiente línea:
Guarde y cierre el archivo. Ahora, copie el archivo info.php que creó a site2
:
Ahora, su servidor web debería disponer de los directorios root de documentos que cada sitio requiere para presentar datos a los visitantes. A continuación, configurará su servidor web Apache para que funcione con dos versiones de PHP distintas.
En esta sección, creará dos archivos de configuración de host virtual. Esto permitirá que sus dos sitios web funcionen en simultáneo con dos versiones de PHP distintas.
Para que Apache proporcione este contenido, es necesario crear un archivo de host virtual con las directivas correctas. En vez de modificar el archivo de configuración predeterminado ubicado en /etc/apache2/sites-available/000-default.conf
, creará dos archivos nuevos en el directorio /etc/apache2/sites-available/
.
Primero, cree un nuevo archivo de configuración de host virtual para el sitio web site1.your_domain
. Aquí, le indicará a Apache que represente contenido usando php7.0
:
Añada el siguiente contenido: Asegúrese de que la ruta del directorio del sitio web, el nombre del servidor y la versión de PHP concuerden con su configuración:
<VirtualHost *:80>
ServerAdmin admin@site1.your_domain
ServerName site1.your_domain
DocumentRoot /var/www/site1.your_domain
DirectoryIndex info.php
<Directory /var/www/site1.your_domain>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
<FilesMatch \.php$>
# For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/site1.your_domain_error.log
CustomLog ${APACHE_LOG_DIR}/site1.your_domain_access.log combined
</VirtualHost>
En este archivo, actualizó DocumentRoot
a su nuevo directorio y ServerAdmin
a un correo electrónico al que puede acceder el administrador del sitio your_domain
. También actualizó ServerName
, que establece el dominio base para esta configuración de host virtual, y añadió una directiva SetHandler
para ejecutar PHP como servidor de procesos fastCGI.
Guarde y cierre el archivo.
A continuación, cree un nuevo archivo de configuración de host virtual para el sitio web site2.your_domain
. Le indicará a este subdominio que implemente php7.2
:
Añada el siguiente contenido: Nuevamente, asegúrese de que la ruta del directorio del sitio web, el nombre del servidor y la versión de PHP concuerden con su información única:
<VirtualHost *:80>
ServerAdmin admin@site2.your_domain
ServerName site2.your_domain
DocumentRoot /var/www/site2.your_domain
DirectoryIndex info.php
<Directory /var/www/site2.your_domain>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
<FilesMatch \.php$>
# For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/site2.your_domain_error.log
CustomLog ${APACHE_LOG_DIR}/site2.your_domain_access.log combined
</VirtualHost>
Guarde y cierre el archivo cuando termine. Luego, compruebe que no haya errores de sintaxis en el archivo de configuración de Apache:
Verá el siguiente resultado:
OutputSyntax OK
A continuación, habilite los dos archivos de configuración de host virtual:
Ahora, deshabilite el sitio predeterminado, dado que no lo necesitará:
Por último, reinicie el servicio de Apache para implementar los cambios:
Ahora que configuró Apache para que presente cada sitio, los probará para asegurarse de que estén en ejecucción las versiones de PHP correspondientes.
En este punto, configuró dos sitios web para que ejecuten dos versiones distintas de PHP. Ahora, pruebe los resultados.
Abra su navegador web y visite los dos sitios http://site1.your_domain
y http://site2.your_domain
. Verá dos páginas como las siguientes:
Observe los títulos. La primera página indica que site1.your_domain
implementó la versión 7.0. La segunda, indica que site2.your_domain
implementó la versión 7.2.
Ahora que probó sus sitios, elimine los archivos info.php
. Plantean una amenaza de seguridad, dado que contienen información confidencial sobre su servidor y usuarios no autorizados pueden acceder a ellos. Para eliminar los dos archivos, ejecute los siguientes comandos:
Ahora, dispondrá de un único servidor de Ubuntu 18.04 que gestiona dos sitios web con dos versiones de PHP distintas. Sin embargo, PHP no se limita a este único uso.
Dispone de hosts virtuales y PHP-FPM combinados para presentar varios sitios web y varias versiones de PHP en un único servidor. Lo único que limita la cantidad de sitios y versiones de PHP que su servicio de Apache puede gestionar es la potencia de procesamiento de su instancia.
A partir de este punto, podría considerar investigar las funciones más avanzadas de PHP-FPM, como su proceso de generación adaptativa o su capacidad de registro de sdtout
y stderr
. Alternativamente, ahora, podría proteger sus sitios web. Para hacerlo, puede seguir nuestro tutorial Cómo proteger sus sitios con certificados TLS y SSL gratuitos de Let´s Encrypt.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!