La tâche consiste à déployer deux applications avec des versions php différentes sur le même serveur Web nginx et sur le même nom de domaine en même temps. Dans notre exemple, il s'agira d'un site Web et d'une application de gestion de la relation client (CRM)..
La tâche consiste à rendre le site ouvert :
- domain.tld - (domaine principal)
- domain.tld/nested-app (application)
Pour assurer la sécurité, le dossier de l'application doit être situé au même niveau que le site, afin qu'en cas de piratage du site, un attaquant n'ait pas accès aux fichiers de l'application et inversement. Dans notre exemple, nous nous installons sur Centos 7.
- /var/www/domain.tld/site - (dossier de sites)
- /var/www/domain.tld/nested-app - (dossier de candidature)
Comme on peut le voir, ils sont au même niveau dans la hiérarchie. Étant donné que les applications utilisent différentes versions de php, nous devrons installer et configurer le deuxième service php-fpm, ainsi que php et configurer le tout sur nginx.
1. Installer php 8 et le service 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
Activez php 8 dans les paramètres du référentiel remi et installez les packages nécessaires:
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. Installez php 7 et le deuxième service 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
Tout est prêt pour la configuration, dans cette configuration nous avons ajouté le service de démarrage automatique.
3. Installez et configurez nginx.
yum install nginx
La configuration de notre domaine sera la suivante:
/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;
}
}
Dans notre cas:
- domain.tld - en cours d'exécution sur le port 9000
- domain.tld/nested-app - en cours d'exécution sur le port 9003
Selon le php dont vous avez besoin, spécifiez le port dans les paramètres de chacun, car les deux ont le port 9000 par défaut.
Cela se fait dans le fichier de configuration:
- Pour le principal /etc/php-fpm.d/www.conf
- Pour plus avec php 7 /etc/opt/rh/rh-php73/php-fpm.d/www.conf
Pour appliquer la configuration, vous devez redémarrer tous les services
systemctl restart rh-php73-php-fpm
systemctl restart php-fpm
systemctl restart nginx