Image

Base de conocimientos → Configuración de dos servicios php-fpm con diferentes versiones de php en diferentes carpetas en el mismo dominio

[Servidores virtuales]
Fecha de publicación: 24.11.2022

La tarea es implementar dos aplicaciones con diferentes versiones de php en el mismo servidor web nginx y en el mismo nombre de dominio al mismo tiempo. En nuestro ejemplo, será un sitio web y una aplicación de gestión de relaciones con los clientes (CRM).

La tarea es hacer que el sitio se abra:

  • domain.tld - (dominio principal)
  • domain.tld/nested-app (solicitud)

Para garantizar la seguridad, la carpeta de la aplicación debe estar ubicada al mismo nivel que el sitio, de modo que, en caso de pirateo del sitio, un atacante no obtenga acceso a los archivos de la aplicación y viceversa. En nuestro ejemplo, estamos configurando en Centos 7.

  • /var/www/domain.tld/site - (carpeta del sitio)
  • /var/www/domain.tld/nested-app - (carpeta de la aplicación)

Como podemos ver, están en el mismo nivel en la jerarquía. Dado que las aplicaciones usan diferentes versiones de php, necesitaremos instalar y configurar el segundo servicio php-fpm, junto con php y configurarlo todo en nginx. 


1. Instale el servicio php 8 y php-fpm

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget https://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm

Habilite php 8 en la configuración del repositorio de remi e instale los paquetes necesarios:

apt install php php-fpm php-mysql php-common php-cli php-json php-opcache php-readline php-mbstring php-xml php-gd php-curl

2. Instale php 7 y el segundo servicio php-fpm

yum install centos-release-scl
yum install rh-php73 rh-php73-php-fpm
scl enable rh-php73 bash
semanage port -a -t http_port_t -p tcp 9003
systemctl start rh-php73-php-fpm
systemctl enable rh-php73-php-fpm

Todo está listo para la configuración, en esta configuración hemos agregado el servicio para que se inicie automáticamente.


3. Instalar y configurar nginx.

yum install nginx

La configuración para nuestro dominio será la siguiente:

/etc/nginx/conf.d/domain_tld.conf
server { 

listen xx.x.xx.x:443 ssl;
listen [ipv6]:443 ssl; 
server_name domain.tld www.domain.tld; 
index index.php index.html;

 set $base /var/www/domain.tld;
 root $base/site;
 ssl_certificate /etc/ssl/domain_tld/cert23.crt;
 ssl_certificate_key /etc/ssl/domain_tld/cert23.key;
 client_body_timeout 5s;
 client_header_timeout 5s;
 client_max_body_size 32m;
 ssl_session_timeout 5m;

 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.2;
 ssl_ciphers HIGH:!aNULL:!MD5;
 ssl_prefer_server_ciphers on;

 add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; ";
 ssl_stapling on;
 ssl_stapling_verify on;

 gzip on;
 gzip_disable "msie6";

 gzip_types text/plain text/css application/json application/x-javascript text/xml 
application/xml application/xml+rss text/javascript application/javascript;

# -- www to no www --

 if ($host ~* ^www.domain.tld$) {
 rewrite ^(.*)$ https://domain.tld$1 permanent;
 }
# -- www to no www --

location / {
 try_files $uri $uri/ /index.php?$query_string;   }

location ^~ /nested-app {alias $base/nested-app;

        if (!-e $request_filename) {
            rewrite ^ /nested-app/index.php last;        }

location ~ \.php$ {
            if (!-f $request_filename) {rewrite ^
            /nested-app/index.php last;
            } include /etc/nginx/fastcgi_params;
            fastcgi_pass 127.0.0.1:9003;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            }
  }
location ~ \.php$ { include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9000; 
        fastcgi_param SCRIPT_FILENAME $request_filename;
    }
}


En nuestro caso:

  • domain.tld - corriendo en el puerto 9000
  • domain.tld/nested-app - corriendo en el puerto 9003


Dependiendo de que php necesites, especifica el puerto en la configuración de cada uno, ya que ambos tienen el puerto 9000 por defecto.

Esto se hace en el archivo de configuración:

  • Para el principal /etc/php-fpm.d/www.conf
  • Para adicional con php 7 /etc/opt/rh/rh-php73/php-fpm.d/www.conf

Para aplicar la configuración, debe reiniciar todos los servicios

systemctl restart rh-php73-php-fpm
systemctl restart php-fpm
systemctl restart nginx




Sin comentarios aún