Salta el contingut

MP08 - UF1: Servidors web i de transferència de fitxers

Apache i Nginx - Configuració php: Multiversió

Fixeu-vos bé que, en Apache, només podem tenir habilitat un mòdul de php en el nostre servidor web i que aquest és global per a tot el Site. Llavors, no puc tenir instal·lades altres versions de php per si el software (CSS) que vull instal·lar en necessita una altra?

La resposta a aquesta pregunta és: Sí que podem tenir diferents versions de php en el mateix servidor, però caldrà utilitzar el php-fpm (FastCGI Process Manager (FPM)). Alguns altres servidors web, com ara Nginx, només utilitzen aquest mètode.

Com funciona php en Apache?

Ara que ja hem treballat amb Apache sota el rol de servidor d'aplicacions entrarem en detall sobre com executa aquesta tasca. Recordem que les peticions HTTP arriben al servidor i aquest les ha de passar a un intèrpret del codi corresponent. En el nostre cas, PHP.

Això es fa a través del MPM (mòduls de multiprocessament).

En la instal·lació per defecte (servidor web convencional amb pàgines estàtiques) es treballa en mode event. Només cal tenir en compte que es van creant processos fill a mesura que arriben peticions i aquests les gestionen a través de diferents threads.

Si voleu consultar amb quin MPM treballa Apache en aquell moment sempre podeu llançar la següent comanda:

apache2ctl -V | grep MPM
Server MPM:     prefork

Quan s'instal·la el mòdul de PHP, tal com hem fet fins ara, es passa a treballar amb el MPM prefork. Es creen diferents processos independents per a gestionar les diferents peticions (tècnica de forking). Quan arranca Apache en mode prefork es creen diversos processos fill i cadascun respon a una petició. A /etc/apache2/mods-enabled també sempre veureu el que està actiu, i on podreu fer el set up dels seus valors de configuració. A /etc/apache2/mods-available també sempre veureu els que podem activar, i on podreu fer el set up dels seus valors de configuració.

ls /etc/apache2/mods-available/*mpm*
/etc/apache2/mods-available/mpm_event.conf    /etc/apache2/mods-available/mpm_prefork.load
/etc/apache2/mods-available/mpm_event.load    /etc/apache2/mods-available/mpm_worker.conf
/etc/apache2/mods-available/mpm_prefork.conf  /etc/apache2/mods-available/mpm_worker.load

Treballar amb el mod_php dins Apache vol dir que es crea un manipulador (handler) que és qui gestiona els fitxers amb extensió php i els passa al motor de PHP perquè siguin interpretats. Això implica que PHP s'executa com a mòdul dins Apache, de forma que no es criden processos externs i proporciona major agilitat i major rendiment, ja que per cada fill d'Apache es carrega en memòria una instància de PHP. Per contra això consumeix normalment més recursos dels realment necessaris. De totes maneres podem treballar amb PHP d'una altra manera.

Inicialment, va sorgir el concepte de CGI (Common Getaway Interface), i permet interactuar Apache amb programes externs. Cada petició de PHP inicia un procés d'execució independent que es tanca quan s'acaba l'execució. Això proporciona eficiència en recursos, però perjudica el rendiment. Actualment està en desús, la implementació actual és FastCGI.

FastCGI manté la connexió oberta de forma persistent i, per tant, no es tanca un cop acaba el procés que la va obrir. Ens ajuda a tenir diferents versions de PHP per atendre les peticions d'Apache, fet que soluciona el gran inconvenient de treballar amb mod_php. A més, ens proporciona un altre gran avantatge: ja no cal que PHP i Apache estiguin executant-se a la mateixa màquina, podem comunicar-nos via TCP/IP. Arran d'aquest comportament, neix FPM (FastCGI Process Manager) És una implementació millorada i específica del FastCGI per aconseguir un millor rendiment en entorns web.

FPM presenta grans avantatges com ara permetre múltiples versions de PHP al mateix servidor. A més permet personalitzar molts paràmetres de configuració i executar un millor control de processos. Per contra, la seva configuració és relativament complexa. De cara a la programació web, el gran avantatge és la capacitat d'executar un mateix site sota dues o més versions diferents de PHP. Permet fer un desenvolupament o adaptació (un mòdul, template, nova funcionalitat per exemple) en paral·lel sense afectar la pàgina en producció. També es pot definir un fitxer php.ini particular per cada site. En el món actual, cap a la virtualització en contenidors, és extremadament útil per tal de dedicar tantes instàncies com siguin necessàries per site sense afectar a la resta. Passa el mateix des del punt de vista de la seguretat, ja que cada execució de PHP s'executa en un entorn aïllat.

Configuració

Tant en Apache com en Nginx, cal saber quina versió de php necessitem. En Nginx, si volem instal·lar la darrera, ja podem fer-ho directament, ara bé, si volem una versió diferent de la que se'ns instal·la per defecte, cal afegir un nou repositori de cerca pel php.

Comprovem la versió que ve per defecte
sudo apt update
sudo apt-cache policy php
Resposta obtinguda
php:
  Instal·lat: (cap)
  Candidat:   2:8.1+92ubuntu1
  Taula de versions:
     2:8.1+92ubuntu1 500
        500 http://gb.archive.ubuntu.com/ubuntu jammy/main amd64 Packages

Com podem veure, per defecte ens instal·larà la versió 8.1

Si volem instal·lar aquesta, ja podem fer-ho

sudo apt install -y php php-fpm
Possible sortida
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
S'està llegint la llista de paquets… Fet
S'està construint l'arbre de dependències… Fet
S'està llegint la informació de l'estat… Fet
S'instal·laran els següents paquets extres:
apache2 apache2-bin apache2-data apache2-utils bzip2 libapache2-mod-php8.1 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.3-0 mailcap
mime-support php-common php8.1 php8.1-cli php8.1-common php8.1-fpm php8.1-opcache php8.1-readline ssl-cert
Paquets suggerits:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom www-browser bzip2-doc php-pear
S'instal·laran els paquets NOUS següents:
apache2 apache2-bin apache2-data apache2-utils bzip2 libapache2-mod-php8.1 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.3-0 mailcap
mime-support php php-common php-fpm php8.1 php8.1-cli php8.1-common php8.1-fpm php8.1-opcache php8.1-readline ssl-cert
0 actualitzats, 23 nous a instal·lar, 0 a suprimir i 98 no actualitzats.
S'ha d'obtenir 9.113 kB d'arxius.
Després d'aquesta operació s'utilitzaran 35,5 MB d'espai en disc addicional.
Bai:1 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libapr1 amd64 1.7.0-8ubuntu0.22.04.1 [108 kB]
Bai:2 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libaprutil1 amd64 1.6.1-5ubuntu4.22.04.2 [92,8 kB]
Bai:3 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libaprutil1-dbd-sqlite3 amd64 1.6.1-5ubuntu4.22.04.2 [11,3 kB]
Bai:4 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libaprutil1-ldap amd64 1.6.1-5ubuntu4.22.04.2 [9.170 B]
Bai:5 http://gb.archive.ubuntu.com/ubuntu jammy/main amd64 liblua5.3-0 amd64 5.3.6-1build1 [140 kB]
Bai:6 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 apache2-bin amd64 2.4.52-1ubuntu4.12 [1.348 kB]
Bai:7 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 apache2-data all 2.4.52-1ubuntu4.12 [165 kB]
Bai:8 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 apache2-utils amd64 2.4.52-1ubuntu4.12 [89,1 kB]
Bai:9 http://gb.archive.ubuntu.com/ubuntu jammy/main amd64 mailcap all 3.70+nmu1ubuntu1 [23,8 kB]
Bai:10 http://gb.archive.ubuntu.com/ubuntu jammy/main amd64 mime-support all 3.66 [3.696 B]
Bai:11 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 apache2 amd64 2.4.52-1ubuntu4.12 [97,9 kB]
Bai:12 http://gb.archive.ubuntu.com/ubuntu jammy/main amd64 bzip2 amd64 1.0.8-5build1 [34,8 kB]
Bai:13 http://gb.archive.ubuntu.com/ubuntu jammy/main amd64 php-common all 2:92ubuntu1 [12,4 kB]
Bai:14 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 php8.1-common amd64 8.1.2-1ubuntu2.18 [1.126 kB]
Bai:15 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 php8.1-opcache amd64 8.1.2-1ubuntu2.18 [365 kB]
Bai:16 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 php8.1-readline amd64 8.1.2-1ubuntu2.18 [13,5 kB]
Bai:17 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 php8.1-cli amd64 8.1.2-1ubuntu2.18 [1.834 kB]
Bai:18 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libapache2-mod-php8.1 amd64 8.1.2-1ubuntu2.18 [1.765 kB]
Bai:19 http://gb.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 php8.1-fpm amd64 8.1.2-1ubuntu2.18 [1.840 kB]
Bai:20 http://gb.archive.ubuntu.com/ubuntu jammy-updates/main amd64 php8.1 all 8.1.2-1ubuntu2.18 [9.158 B]
Bai:21 http://gb.archive.ubuntu.com/ubuntu jammy/main amd64 php all 2:8.1+92ubuntu1 [2.756 B]
Bai:22 http://gb.archive.ubuntu.com/ubuntu jammy/universe amd64 php-fpm all 2:8.1+92ubuntu1 [2.838 B]
Bai:23 http://gb.archive.ubuntu.com/ubuntu jammy/main amd64 ssl-cert all 1.1.2 [17,4 kB]
S'ha baixat 9.113 kB en 1s (8.184 kB/s)
S'estan preconfigurant els paquets...
S'està seleccionant el paquet libapr1:amd64 prèviament no seleccionat.
(S'està llegint la base de dades… hi ha 89484 fitxers i directoris instal·lats actualment.)
S'està preparant per a desempaquetar …/00-libapr1_1.7.0-8ubuntu0.22.04.1_amd64.deb…
S'està desempaquetant libapr1:amd64 (1.7.0-8ubuntu0.22.04.1)…
S'està seleccionant el paquet libaprutil1:amd64 prèviament no seleccionat.
S'està preparant per a desempaquetar …/01-libaprutil1_1.6.1-5ubuntu4.22.04.2_amd64.deb…
S'està desempaquetant libaprutil1:amd64 (1.6.1-5ubuntu4.22.04.2)…
S'està seleccionant el paquet libaprutil1-dbd-sqlite3:amd64 prèviament no seleccionat.
S'està preparant per a desempaquetar …/02-libaprutil1-dbd-sqlite3_1.6.1-5ubuntu4.22.04.2_amd64.deb…
S'està desempaquetant libaprutil1-dbd-sqlite3:amd64 (1.6.1-5ubuntu4.22.04.2)…
S'està seleccionant el paquet libaprutil1-ldap:amd64 prèviament no seleccionat.
S'està preparant per a desempaquetar …/03-libaprutil1-ldap_1.6.1-5ubuntu4.22.04.2_amd64.deb…
S'està desempaquetant libaprutil1-ldap:amd64 (1.6.1-5ubuntu4.22.04.2)…
S'està seleccionant el paquet liblua5.3-0:amd64 prèviament no seleccionat.
S'està preparant per a desempaquetar …/04-liblua5.3-0_5.3.6-1build1_amd64.deb…
S'està desempaquetant liblua5.3-0:amd64 (5.3.6-1build1)…
S'està seleccionant el paquet apache2-bin prèviament no seleccionat.
S'està preparant per a desempaquetar …/05-apache2-bin_2.4.52-1ubuntu4.12_amd64.deb…
S'està desempaquetant apache2-bin (2.4.52-1ubuntu4.12)…
S'està seleccionant el paquet apache2-data prèviament no seleccionat.
S'està preparant per a desempaquetar …/06-apache2-data_2.4.52-1ubuntu4.12_all.deb…
S'està desempaquetant apache2-data (2.4.52-1ubuntu4.12)…
S'està seleccionant el paquet apache2-utils prèviament no seleccionat.
S'està preparant per a desempaquetar …/07-apache2-utils_2.4.52-1ubuntu4.12_amd64.deb…
S'està desempaquetant apache2-utils (2.4.52-1ubuntu4.12)…
S'està seleccionant el paquet mailcap prèviament no seleccionat.
S'està preparant per a desempaquetar …/08-mailcap_3.70+nmu1ubuntu1_all.deb…
S'està desempaquetant mailcap (3.70+nmu1ubuntu1)…
S'està seleccionant el paquet mime-support prèviament no seleccionat.
S'està preparant per a desempaquetar …/09-mime-support_3.66_all.deb…
S'està desempaquetant mime-support (3.66)…
S'està seleccionant el paquet apache2 prèviament no seleccionat.
S'està preparant per a desempaquetar …/10-apache2_2.4.52-1ubuntu4.12_amd64.deb…
S'està desempaquetant apache2 (2.4.52-1ubuntu4.12)…
S'està seleccionant el paquet bzip2 prèviament no seleccionat.
S'està preparant per a desempaquetar …/11-bzip2_1.0.8-5build1_amd64.deb…
S'està desempaquetant bzip2 (1.0.8-5build1)…
S'està seleccionant el paquet php-common prèviament no seleccionat.
S'està preparant per a desempaquetar …/12-php-common_2%3a92ubuntu1_all.deb…
S'està desempaquetant php-common (2:92ubuntu1)…
S'està seleccionant el paquet php8.1-common prèviament no seleccionat.
S'està preparant per a desempaquetar …/13-php8.1-common_8.1.2-1ubuntu2.18_amd64.deb…
S'està desempaquetant php8.1-common (8.1.2-1ubuntu2.18)…
S'està seleccionant el paquet php8.1-opcache prèviament no seleccionat.
S'està preparant per a desempaquetar …/14-php8.1-opcache_8.1.2-1ubuntu2.18_amd64.deb…
S'està desempaquetant php8.1-opcache (8.1.2-1ubuntu2.18)…
S'està seleccionant el paquet php8.1-readline prèviament no seleccionat.
S'està preparant per a desempaquetar …/15-php8.1-readline_8.1.2-1ubuntu2.18_amd64.deb…
S'està desempaquetant php8.1-readline (8.1.2-1ubuntu2.18)…
S'està seleccionant el paquet php8.1-cli prèviament no seleccionat.
S'està preparant per a desempaquetar …/16-php8.1-cli_8.1.2-1ubuntu2.18_amd64.deb…
S'està desempaquetant php8.1-cli (8.1.2-1ubuntu2.18)…
S'està seleccionant el paquet libapache2-mod-php8.1 prèviament no seleccionat.
S'està preparant per a desempaquetar …/17-libapache2-mod-php8.1_8.1.2-1ubuntu2.18_amd64.deb…
S'està desempaquetant libapache2-mod-php8.1 (8.1.2-1ubuntu2.18)…
S'està seleccionant el paquet php8.1-fpm prèviament no seleccionat.
S'està preparant per a desempaquetar …/18-php8.1-fpm_8.1.2-1ubuntu2.18_amd64.deb…
S'està desempaquetant php8.1-fpm (8.1.2-1ubuntu2.18)…
S'està seleccionant el paquet php8.1 prèviament no seleccionat.
S'està preparant per a desempaquetar …/19-php8.1_8.1.2-1ubuntu2.18_all.deb…
S'està desempaquetant php8.1 (8.1.2-1ubuntu2.18)…
S'està seleccionant el paquet php prèviament no seleccionat.
S'està preparant per a desempaquetar …/20-php_2%3a8.1+92ubuntu1_all.deb…
S'està desempaquetant php (2:8.1+92ubuntu1)…
S'està seleccionant el paquet php-fpm prèviament no seleccionat.
S'està preparant per a desempaquetar …/21-php-fpm_2%3a8.1+92ubuntu1_all.deb…
S'està desempaquetant php-fpm (2:8.1+92ubuntu1)…
S'està seleccionant el paquet ssl-cert prèviament no seleccionat.
S'està preparant per a desempaquetar …/22-ssl-cert_1.1.2_all.deb…
S'està desempaquetant ssl-cert (1.1.2)…
S'està configurant php-common (2:92ubuntu1)…
Created symlink /etc/systemd/system/timers.target.wants/phpsessionclean.timer  /lib/systemd/system/phpsessionclean.timer.
S'està configurant php8.1-common (8.1.2-1ubuntu2.18)…

Creating config file /etc/php/8.1/mods-available/calendar.ini with new version

Creating config file /etc/php/8.1/mods-available/ctype.ini with new version

Creating config file /etc/php/8.1/mods-available/exif.ini with new version

Creating config file /etc/php/8.1/mods-available/fileinfo.ini with new version

Creating config file /etc/php/8.1/mods-available/ffi.ini with new version

Creating config file /etc/php/8.1/mods-available/ftp.ini with new version

Creating config file /etc/php/8.1/mods-available/gettext.ini with new version

Creating config file /etc/php/8.1/mods-available/iconv.ini with new version

Creating config file /etc/php/8.1/mods-available/pdo.ini with new version

Creating config file /etc/php/8.1/mods-available/phar.ini with new version

Creating config file /etc/php/8.1/mods-available/posix.ini with new version

Creating config file /etc/php/8.1/mods-available/shmop.ini with new version

Creating config file /etc/php/8.1/mods-available/sockets.ini with new version

Creating config file /etc/php/8.1/mods-available/sysvmsg.ini with new version

Creating config file /etc/php/8.1/mods-available/sysvsem.ini with new version

Creating config file /etc/php/8.1/mods-available/sysvshm.ini with new version

Creating config file /etc/php/8.1/mods-available/tokenizer.ini with new version
S'està configurant libapr1:amd64 (1.7.0-8ubuntu0.22.04.1)…
S'està configurant bzip2 (1.0.8-5build1)…
S'està configurant ssl-cert (1.1.2)…
S'està configurant liblua5.3-0:amd64 (5.3.6-1build1)…
S'està configurant php8.1-readline (8.1.2-1ubuntu2.18)…

Creating config file /etc/php/8.1/mods-available/readline.ini with new version
S'està configurant apache2-data (2.4.52-1ubuntu4.12)…
S'està configurant mailcap (3.70+nmu1ubuntu1)…
S'està configurant php8.1-opcache (8.1.2-1ubuntu2.18)…

Creating config file /etc/php/8.1/mods-available/opcache.ini with new version
S'està configurant libaprutil1:amd64 (1.6.1-5ubuntu4.22.04.2)…
S'està configurant mime-support (3.66)…
S'està configurant libaprutil1-ldap:amd64 (1.6.1-5ubuntu4.22.04.2)…
S'està configurant libaprutil1-dbd-sqlite3:amd64 (1.6.1-5ubuntu4.22.04.2)…
S'està configurant php8.1-cli (8.1.2-1ubuntu2.18)…
update-alternatives: s'està emprant /usr/bin/php8.1 per a proveir /usr/bin/php (php) en mode automàtic
update-alternatives: s'està emprant /usr/bin/phar8.1 per a proveir /usr/bin/phar (phar) en mode automàtic
update-alternatives: s'està emprant /usr/bin/phar.phar8.1 per a proveir /usr/bin/phar.phar (phar.phar) en mode automàtic

Creating config file /etc/php/8.1/cli/php.ini with new version
S'està configurant apache2-utils (2.4.52-1ubuntu4.12)…
S'està configurant apache2-bin (2.4.52-1ubuntu4.12)…
S'està configurant php8.1-fpm (8.1.2-1ubuntu2.18)…
Package apache2 is not configured yet. Will defer actions by package php8.1-fpm.

Creating config file /etc/php/8.1/fpm/php.ini with new version
NOTICE: Not enabling PHP 8.1 FPM by default.
NOTICE: To enable PHP 8.1 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php8.1-fpm
NOTICE: You are seeing this message because you have apache2 package installed.
Created symlink /etc/systemd/system/multi-user.target.wants/php8.1-fpm.service  /lib/systemd/system/php8.1-fpm.service.
S'està configurant php-fpm (2:8.1+92ubuntu1)…
S'està configurant libapache2-mod-php8.1 (8.1.2-1ubuntu2.18)…
Package apache2 is not configured yet. Will defer actions by package libapache2-mod-php8.1.

Creating config file /etc/php/8.1/apache2/php.ini with new version
No module matches
S'està configurant apache2 (2.4.52-1ubuntu4.12)…
Enabling module mpm_event.
Enabling module authz_core.
Enabling module authz_host.
Enabling module authn_core.
Enabling module auth_basic.
Enabling module access_compat.
Enabling module authn_file.
Enabling module authz_user.
Enabling module alias.
Enabling module dir.
Enabling module autoindex.
Enabling module env.
Enabling module mime.
Enabling module negotiation.
Enabling module setenvif.
Enabling module filter.
Enabling module deflate.
Enabling module status.
Enabling module reqtimeout.
Enabling conf charset.
Enabling conf localized-error-pages.
Enabling conf other-vhosts-access-log.
Enabling conf security.
Enabling conf serve-cgi-bin.
Enabling site 000-default.
info: Switch to mpm prefork for package libapache2-mod-php8.1
Module mpm_event disabled.
Enabling module mpm_prefork.
info: Executing deferred 'a2enmod php8.1' for package libapache2-mod-php8.1
Enabling module php8.1.
Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service → /lib/systemd/system/apache2.service.
Could not execute systemctl:  at /usr/bin/deb-systemd-invoke line 142.
Created symlink /etc/systemd/system/multi-user.target.wants/apache-htcacheclean.service → /lib/systemd/system/apache-htcacheclean.service.
S'està configurant php8.1 (8.1.2-1ubuntu2.18)…
S'està configurant php (2:8.1+92ubuntu1)…
S'estan processant els activadors per a ufw (0.36.1-4ubuntu0.1)…
S'estan processant els activadors per a man-db (2.10.2-1)…
S'estan processant els activadors per a libc-bin (2.35-0ubuntu3.6)…
S'estan processant els activadors per a php8.1-cli (8.1.2-1ubuntu2.18)…
S'estan processant els activadors per a php8.1-fpm (8.1.2-1ubuntu2.18)…
NOTICE: Not enabling PHP 8.1 FPM by default.
NOTICE: To enable PHP 8.1 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php8.1-fpm
NOTICE: You are seeing this message because you have apache2 package installed.
S'estan processant els activadors per a libapache2-mod-php8.1 (8.1.2-1ubuntu2.18)…
Scanning processes...
Scanning linux images...

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.

COMPTE: aquesta prova està feta en un servidor amb Nginx i m'ha instal·lat l'Apache

Per desinstal·lar el servidor Apache podem executar

sudo apt remove --purge apache2 libapache2-mod-php8.1
sudo apt -y auto-remove

Si volem instal·lar una nova versió diferent de php, ho farem abans d'activar l'FPM. Per mostar-ho bé, el que farem serà instal·lar una versió anterior de php, la versió 7.4.

Comprovem la versió que ens vol instal·lar...

sudo apt-cache policy php7.4
libapache2-mod-php7.4:
  Instal·lat: (cap)
  Candidat:   8.1.2-1ubuntu2.18
  Taula de versions:
     8.1.2-1ubuntu2.18 500
        500 http://gb.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages
        500 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages
     8.1.2-1ubuntu2 500
        500 http://gb.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
php7.4-fpm:
  Instal·lat: (cap)
  Candidat:   (cap)
  Taula de versions:
php7.4-common:
  Instal·lat: (cap)
  Candidat:   (cap)
  Taula de versions:

No hi ha cap altra versió de php disponible per a ser instal·lada

Abans de fer la instal·lació, cal afegir el repositori de php (Ondrej PHP) al sistema. Ho farem de la següent forma:

En l'executar la comanda

sudo add-apt-repository ppa:ondrej/php

Premerem Control + C, ja que ens avisa que, segons el servidor web que estiguem utilitzant, instal·lem un o un altre repositori

Avís que ens mostra sobre el servidor i el repositori
PPA publishes dbgsym, you may need to include 'main/debug' component
Repository: 'deb https://ppa.launchpadcontent.net/ondrej/php/ubuntu/ jammy main'
Description:
Co-installable PHP versions: PHP 5.6, PHP 7.x, PHP 8.x and most requested extensions are included. Only Supported Ubuntu Releases (https://wiki.ubuntu.com/Releases) are provided.

Debian oldstable and stable packages are provided as well: https://deb.sury.org/#debian-dpa

You can get more information about the packages at https://deb.sury.org

BUGS&FEATURES: This PPA now has a issue tracker:
https://deb.sury.org/#bug-reporting

CAVEATS:
1. If you are using php-gearman, you need to add ppa:ondrej/pkg-gearman
2. If you are using apache2, you are advised to add ppa:ondrej/apache2
3. If you are using nginx, you are advised to add ppa:ondrej/nginx-mainline
   or ppa:ondrej/nginx

PLEASE READ: If you like my work and want to give me a little motivation, please consider donating regularly: https://donate.sury.org/

WARNING: add-apt-repository is broken with non-UTF-8 locales, see
https://github.com/oerdnj/deb.sury.org/issues/56 for workaround:

# LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
More info: https://launchpad.net/~ondrej/+archive/ubuntu/php
Adding repository.
Press [ENTER] to continue or Ctrl-c to cancel.
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo add-apt-repository ppa:ondrej/apache2
sudo apt-get update -y
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo add-apt-repository ppa:ondrej/nginx-mainline
sudo apt-get update -y

Ara ja tenim més versions per a instal·lar: 5.6, 7.1, 7.2, 7.3 i 7.4.

isard@ubuntu:~$ sudo apt-cache policy php7.4
php7.4:
  Instal·lat: (cap)
  Candidat:   1:7.4.33-13+ubuntu22.04.1+deb.sury.org+1
  Taula de versions:
     1:7.4.33-13+ubuntu22.04.1+deb.sury.org+1 500
        500 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main amd64 Packages
isard@ubuntu:~$ sudo apt-cache policy php7.3
php7.3:
  Instal·lat: (cap)
  Candidat:   7.3.33-19+ubuntu22.04.1+deb.sury.org+1
  Taula de versions:
     7.3.33-19+ubuntu22.04.1+deb.sury.org+1 500
        500 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main amd64 Packages
isard@ubuntu:~$ sudo apt-cache policy php7.2
php7.2:
  Instal·lat: (cap)
  Candidat:   7.2.34-50+ubuntu22.04.1+deb.sury.org+1
  Taula de versions:
     7.2.34-50+ubuntu22.04.1+deb.sury.org+1 500
        500 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main amd64 Packages
isard@ubuntu:~$ sudo apt-cache policy php7.1
php7.1:
  Instal·lat: (cap)
  Candidat:   7.1.33-63+ubuntu22.04.1+deb.sury.org+1
  Taula de versions:
     7.1.33-63+ubuntu22.04.1+deb.sury.org+1 500
        500 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main amd64 Packages
isard@ubuntu:~$ sudo apt-cache policy php5.6
php5.6:
  Instal·lat: (cap)
  Candidat:   5.6.40-77+ubuntu22.04.1+deb.sury.org+1
  Taula de versions:
     5.6.40-77+ubuntu22.04.1+deb.sury.org+1 500
        500 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main amd64 Packages

Per tant, farem la instal·lació de la versió que vulguem. Provarem la 7.4

sudo apt install -y php7.4 php7.4-fpm libapache2-mod-php7.4 libapache2-mod-fcgid

i al final ens avisa ...

Creating config file /etc/php/7.4/fpm/php.ini with new version
NOTICE: Not enabling PHP 7.4 FPM by default.
NOTICE: To enable PHP 7.4 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php7.4-fpm
NOTICE: You are seeing this message because you have apache2 package installed.
Created symlink /etc/systemd/system/multi-user.target.wants/php7.4-fpm.service  /lib/systemd/system/php7.4-fpm.service.
S'està configurant php7.4 (1:7.4.33-13+ubuntu22.04.1+deb.sury.org+1)…
S'estan processant els activadors per a man-db (2.10.2-1)…
S'estan processant els activadors per a php7.4-cli (1:7.4.33-13+ubuntu22.04.1+deb.sury.org+1)…
S'estan processant els activadors per a libapache2-mod-php7.4 (1:7.4.33-13+ubuntu22.04.1+deb.sury.org+1)…
S'estan processant els activadors per a php7.4-fpm (1:7.4.33-13+ubuntu22.04.1+deb.sury.org+1)NOTICE: Not enabling PHP 7.4 FPM by default.
NOTICE: To enable PHP 7.4 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php7.4-fpm
NOTICE: You are seeing this message because you have apache2 package installed.
Scanning processes...
Scanning linux images...

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.
Habilitem el proxy_fcgi i reiniciem el servidor fpm

sudo a2enmod proxy_fcgi
sudo systemctl start php7.4-fpm
sudo apt install -y php7.4 php7.4-fpm

i al final ens avisa ...

Creating config file /etc/php/7.4/fpm/php.ini with new version
Created symlink /etc/systemd/system/multi-user.target.wants/php7.4-fpm.service  /lib/systemd/system/php7.4-fpm.service.
S'està configurant php7.4 (1:7.4.33-13+ubuntu22.04.1+deb.sury.org+1)…
S'estan processant els activadors per a man-db (2.10.2-1)…
S'estan processant els activadors per a php7.4-cli (1:7.4.33-13+ubuntu22.04.1+deb.sury.org+1)…
S'estan processant els activadors per a php7.4-fpm (1:7.4.33-13+ubuntu22.04.1+deb.sury.org+1)…
Scanning processes...
Scanning linux images...

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.

Reiniciem el servidor fpm

sudo systemctl start php7.4-fpm

Fixeu-vos que tenim un nou Servei anomenat php7.4-fpm

Ara ja podem crear un nou lloc virtual afegint-hi les següents línies

    <FilesMatch \.php$>
        # From the Apache version 2.4.10 and above, use the SetHandler to run PHP as a fastCGI process server
        SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
    </FilesMatch>

Reiniciem el servidor i provem el info.php de cada site.

Hem configurat diferents versions de php pel lloc per defecte i pel hosting virtual.

Exemple de php múltiple en us servidor i diferents Sites

Ara ja podem crear un nou lloc virtual, o al que tenim per defecte, afegint-hi les següents línies o descomentant les que ja incorpora el mateix fixer default.

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    #
    # With php-fpm (or other unix sockets):
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    # With php-cgi (or other tcp sockets):
    #fastcgi_pass 127.0.0.1:9000;
}

Reiniciem el servidor i provem el info.php de cada site.

Hem configurat diferents versions de php pel lloc per defecte i pel hosting virtual.

Exemple de php múltiple en us servidor i diferents Sites