El autor seleccionó COVID-19 Relief Fund para que reciba una donación como parte del programa Write for DOnations.
El servidor web Apache usa hosts virtuales para gestionar varios dominios en una sola instancia. De forma similar, PHP-FPM usa 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. La combinación de 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, la combinación de Apache y PHP-FPM es una de las mejores pilas para alojar aplicaciones PHP, especialmente, en cuanto al 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 conseguir esto, primero necesitará añadir el repositorio sury php
a su sistema.
Primero, instale los distintos paquetes requeridos incluyendo curl
, wget
y gnup2
:
- sudo apt-get install curl wget gnupg2 ca-certificates lsb-release apt-transport-https -y
Estos paquetes permitirán acceder al repositorio sury php
y hacerlo de forma segura. sury php
es un repositorio de terceros o PPA (archivo de paquete personal). Ofrece PHP 7.4, 7.3, 7.2, 7.1 y 7.0 para el sistema operativo Debian. También ofrece versiones más actualizadas de PHP que los repositorios oficiales de Debian 10, y le permitirá instalar múltiples versiones de PHP en el mismo sistema.
A continuación, importe la clave del paquete:
- wget https://packages.sury.org/php/apt.gpg
- sudo apt-key add apt.gpg
Ahora, añada el repositorio sury php
a su sistema:
- echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php7.list
Actualice el repositorio:
- sudo apt-get update -y
A continuación, instale php7.0
, php7.0-fpm
, php7.0-mysql
, libapache2-mod-php7.0
, y libapache2-mod-fcgid
con los siguientes comandos:
- sudo apt-get install php7.0 php7.0-fpm php7.0-mysql libapache2-mod-php7.0 libapache2-mod-fcgid -y
php7.0
es un metapaquete que se usa para ejecutar aplicaciones de PHP.php7.0-fpm
ofrece el intérprete de 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
.
- sudo apt-get install php7.2 php7.2-fpm php7.2-mysql libapache2-mod-php7.2 -y
Después de instalar las dos versiones de PHP, inicie el servicio php7.0-fpm
:
- sudo systemctl start php7.0-fpm
A continuación, verifique el estado del servicio php7.0-fpm
:
- sudo systemctl status 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 Sat 2020-04-04 08:51:47 UTC; 1min 17s ago
Docs: man:php-fpm7.0(8)
Main PID: 13016 (php-fpm7.0)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1149)
Memory: 19.1M
CGroup: /system.slice/php7.0-fpm.service
├─13016 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
├─13017 php-fpm: pool www
└─13018 php-fpm: pool www
Apr 04 08:51:47 debian10 systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
Apr 04 08:51:47 debian10 systemd[1]: Started The PHP 7.0 FastCGI Process Manager.
Ahora, repitiendo el proceso, inicie el servicio php7.2-fpm
:
- sudo systemctl start php7.2-fpm
Verifique el estado del servicio php7.2-fpm
:
- sudo systemctl status 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 Sat 2020-04-04 08:52:52 UTC; 1min 32s ago
Docs: man:php-fpm7.2(8)
Process: 22207 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.2/fpm/pool.d/www.conf 72 (code=exite
Main PID: 22204 (php-fpm7.2)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1149)
Memory: 12.0M
CGroup: /system.slice/php7.2-fpm.service
├─22204 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
├─22205 php-fpm: pool www
└─22206 php-fpm: pool www
Apr 04 08:52:52 debian10 systemd[1]: Starting The PHP 7.2 FastCGI Process Manager...
Apr 04 08:52:52 debian10 systemd[1]: Started The PHP 7.2 FastCGI Process Manager.
Por último, debe habilitar varios módulos para que su servicio de Apache2 pueda funcionar con varias versiones de PHP:
- sudo a2enmod actions fcgid alias proxy_fcgi
actions
se usa 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 a mod_cgi
que inicia una cantidad suficiente de 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:
- sudo systemctl restart apache2
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
:
- sudo mkdir /var/www/site1.your_domain
- sudo mkdir /var/www/site2.your_domain
De manera predeterminada, el servidor web Apache se ejecuta como usuario www-data
y grupo www-data
. Para asegurarse de tener la propiedad y los permisos correctos de sus directorios root del sitio web, ejecute los siguientes comandos:
- sudo chown -R www-data:www-data /var/www/site1.your_domain
- sudo chown -R www-data:www-data /var/www/site2.your_domain
- sudo chmod -R 755 /var/www/site1.your_domain
- sudo chmod -R 755 /var/www/site2.your_domain
A continuación, creará un archivo info.php
en el directorio root de cada sitio web. Esto mostrará la información de la versión de PHP de cada sitio web. Comience con site1
:
- sudo nano /var/www/site1.your_domain/info.php
Añada la siguiente línea:
<?php phpinfo(); ?>
Guarde y cierre el archivo. Ahora, copie el archivo info.php
que creó a site2
:
- sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php
Ahora, su servidor web debería tener 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
:
- sudo nano /etc/apache2/sites-available/site1.your_domain.conf
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
:
- sudo nano /etc/apache2/sites-available/site2.your_domain.conf
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:
- sudo apachectl configtest
Verá el siguiente resultado:
OutputSyntax OK
A continuación, habilite los dos archivos de configuración de host virtual:
- sudo a2ensite site1.your_domain
- sudo a2ensite site2.your_domain
Ahora, deshabilite el sitio predeterminado, dado que no lo necesitará:
- sudo a2dissite 000-default.conf
Por último, reinicie el servicio de Apache para implementar los cambios:
- sudo systemctl restart apache2
Ahora, que configuró Apache para que sirva cada sitio, los probará para asegurarse de que se estén ejecutando 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:
- sudo rm -rf /var/www/site1.your_domain/info.php
- sudo rm -rf /var/www/site2.your_domain/info.php
Ahora tiene un único servidor Debian 10 que administra dos sitios web con dos versiones PHP diferentes. Sin embargo, PHP no se limita a este único uso.
Ahora, tiene hosts virtuales y PHP-FPM combinados para servir 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.
Ahora, podría considerar explorar 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!