0614 - Bloc1: Servidors web i de transferència de fitxers
Instal·lació de mòduls en Apache i Nginx (iv)
Apache: arquitectura modular
Apache funciona amb una arquitectura modular. Això vol dir que les seves funcionalitats no venen totes activades per defecte, sinó que es poden afegir, activar o desactivar mòduls segons les necessitats.
Un exemple molt habitual és el mòdul de PHP:
- Sense aquest mòdul, Apache només sap servir fitxers estàtics (HTML, imatges, CSS, JS).
- Amb el mòdul PHP, Apache pot enviar fitxers .php
al motor de PHP perquè siguin interpretats i convertits en HTML dinàmic abans de retornar-los al client.
Un exemple clar és, el mòdul per poder treballar amb PHP.
Podríem no instal·lar el mòdul i utilitzar un servei de php, però de moment ho farem així
Relació entre Apache i PHP
Cal que el sistema pugui interpretar el PHP i el mòdul ho lligui amb l'Apache.
- Apache → detecta que s’ha sol·licitat un fitxer amb extensió
.php
. - Mòdul
libapache2-mod-php
→ funciona com a handler (intermediari) i envia aquest fitxer al motor de PHP. - Motor PHP → interpreta el codi i genera la resposta en HTML.
- Apache → retorna la resposta al navegador.
Warning
Si el mòdul no està habilitat, Apache no sabrà què fer amb un fitxer .php
i el descarregarà en brut en lloc d’interpretar-lo.
Per comprovar si tenim instal·lat el mòdul per interpretar (handler) el PHP al servidor Apache2 apt-cache policy libapache2-mod-php
.
Instal·lació del mòdul PHP per Apache
El que fa el mòdul és passar pel motor de PHP (a través d'un handler) tots aquells fitxers amb extensió .php
(i phps
, phtml
, phar
).
Instal·larem el llenguatge PHP i el mòdul de PHP per apache i habilitarem el mòdul per poder treballar amb PHP.
apt install -y php libapache2-mod-php
i la sortida semblant a...
#apt install -y php libapache2-mod-php
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
El paquet següent s'ha instal·lat automàticament i ja no és necessari:
python3-debian
Empreu «sudo apt autoremove» per a suprimir-lo.
S'instal·laran els següents paquets extres:
libapache2-mod-php8.3 php8.3 php8.3-cli php8.3-common php8.3-opcache php8.3-readline
Paquets suggerits:
php-pear
S'instal·laran els paquets NOUS següents:
libapache2-mod-php libapache2-mod-php8.3 php php8.3 php8.3-cli php8.3-common php8.3-opcache php8.3-readline
0 actualitzats, 8 nous a instal·lar, 0 a suprimir i 43 no actualitzats.
S'ha d'obtenir 4.975 kB d'arxius.
Després d'aquesta operació s'utilitzaran 22,3 MB d'espai en disc addicional.
Voleu continuar? [S/n]
Bai:1 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main amd64 php8.3-common amd64 8.3.9-1+ubuntu22.04.1+deb.sury.org+1 [760 kB]
Bai:2 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main amd64 php8.3-opcache amd64 8.3.9-1+ubuntu22.04.1+deb.sury.org+1 [372 kB]
Bai:3 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main amd64 php8.3-readline amd64 8.3.9-1+ubuntu22.04.1+deb.sury.org+1 [13,5 kB]
Bai:4 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main amd64 php8.3-cli amd64 8.3.9-1+ubuntu22.04.1+deb.sury.org+1 [1.924 kB]
Bai:5 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main amd64 libapache2-mod-php8.3 amd64 8.3.9-1+ubuntu22.04.1+deb.sury.org+1 [1.858 kB]
Bai:6 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main amd64 libapache2-mod-php all 2:8.3+94+ubuntu22.04.1+deb.sury.org+2 [7.432 B]
Bai:7 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main amd64 php8.3 all 8.3.9-1+ubuntu22.04.1+deb.sury.org+1 [32,8 kB]
Bai:8 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main amd64 php all 2:8.3+94+ubuntu22.04.1+deb.sury.org+2 [7.194 B]
S'ha baixat 4.975 kB en 1s (8.371 kB/s)
S'està seleccionant el paquet php8.3-common prèviament no seleccionat.
(S'està llegint la base de dades… hi ha 125807 fitxers i directoris instal·lats actualment.)
S'està preparant per a desempaquetar …/0-php8.3-common_8.3.9-1+ubuntu22.04.1+deb.sury.org+1_amd64.deb…
S'està desempaquetant php8.3-common (8.3.9-1+ubuntu22.04.1+deb.sury.org+1)…
S'està seleccionant el paquet php8.3-opcache prèviament no seleccionat.
S'està preparant per a desempaquetar …/1-php8.3-opcache_8.3.9-1+ubuntu22.04.1+deb.sury.org+1_amd64.deb…
S'està desempaquetant php8.3-opcache (8.3.9-1+ubuntu22.04.1+deb.sury.org+1)…
S'està seleccionant el paquet php8.3-readline prèviament no seleccionat.
S'està preparant per a desempaquetar …/2-php8.3-readline_8.3.9-1+ubuntu22.04.1+deb.sury.org+1_amd64.deb…
S'està desempaquetant php8.3-readline (8.3.9-1+ubuntu22.04.1+deb.sury.org+1)…
S'està seleccionant el paquet php8.3-cli prèviament no seleccionat.
S'està preparant per a desempaquetar …/3-php8.3-cli_8.3.9-1+ubuntu22.04.1+deb.sury.org+1_amd64.deb…
S'està desempaquetant php8.3-cli (8.3.9-1+ubuntu22.04.1+deb.sury.org+1)…
S'està seleccionant el paquet libapache2-mod-php8.3 prèviament no seleccionat.
S'està preparant per a desempaquetar …/4-libapache2-mod-php8.3_8.3.9-1+ubuntu22.04.1+deb.sury.org+1_amd64.deb…
S'està desempaquetant libapache2-mod-php8.3 (8.3.9-1+ubuntu22.04.1+deb.sury.org+1)…
S'està seleccionant el paquet libapache2-mod-php prèviament no seleccionat.
S'està preparant per a desempaquetar …/5-libapache2-mod-php_2%3a8.3+94+ubuntu22.04.1+deb.sury.org+2_all.deb…
S'està desempaquetant libapache2-mod-php (2:8.3+94+ubuntu22.04.1+deb.sury.org+2)…
S'està seleccionant el paquet php8.3 prèviament no seleccionat.
S'està preparant per a desempaquetar …/6-php8.3_8.3.9-1+ubuntu22.04.1+deb.sury.org+1_all.deb…
S'està desempaquetant php8.3 (8.3.9-1+ubuntu22.04.1+deb.sury.org+1)…
S'està seleccionant el paquet php prèviament no seleccionat.
S'està preparant per a desempaquetar …/7-php_2%3a8.3+94+ubuntu22.04.1+deb.sury.org+2_all.deb…
S'està desempaquetant php (2:8.3+94+ubuntu22.04.1+deb.sury.org+2)…
S'està configurant php8.3-common (8.3.9-1+ubuntu22.04.1+deb.sury.org+1)…
Creating config file /etc/php/8.3/mods-available/calendar.ini with new version
Creating config file /etc/php/8.3/mods-available/ctype.ini with new version
Creating config file /etc/php/8.3/mods-available/exif.ini with new version
Creating config file /etc/php/8.3/mods-available/fileinfo.ini with new version
Creating config file /etc/php/8.3/mods-available/ffi.ini with new version
Creating config file /etc/php/8.3/mods-available/ftp.ini with new version
Creating config file /etc/php/8.3/mods-available/gettext.ini with new version
Creating config file /etc/php/8.3/mods-available/iconv.ini with new version
Creating config file /etc/php/8.3/mods-available/pdo.ini with new version
Creating config file /etc/php/8.3/mods-available/phar.ini with new version
Creating config file /etc/php/8.3/mods-available/posix.ini with new version
Creating config file /etc/php/8.3/mods-available/shmop.ini with new version
Creating config file /etc/php/8.3/mods-available/sockets.ini with new version
Creating config file /etc/php/8.3/mods-available/sysvmsg.ini with new version
Creating config file /etc/php/8.3/mods-available/sysvsem.ini with new version
Creating config file /etc/php/8.3/mods-available/sysvshm.ini with new version
Creating config file /etc/php/8.3/mods-available/tokenizer.ini with new version
S'està configurant php8.3-readline (8.3.9-1+ubuntu22.04.1+deb.sury.org+1)…
Creating config file /etc/php/8.3/mods-available/readline.ini with new version
S'està configurant php8.3-opcache (8.3.9-1+ubuntu22.04.1+deb.sury.org+1)…
Creating config file /etc/php/8.3/mods-available/opcache.ini with new version
S'està configurant php8.3-cli (8.3.9-1+ubuntu22.04.1+deb.sury.org+1)…
update-alternatives: s'està emprant /usr/bin/php8.3 per a proveir /usr/bin/php (php) en mode automàtic
update-alternatives: s'està emprant /usr/bin/phar8.3 per a proveir /usr/bin/phar (phar) en mode automàtic
update-alternatives: s'està emprant /usr/bin/phar.phar8.3 per a proveir /usr/bin/phar.phar (phar.phar) en mode automàtic
Creating config file /etc/php/8.3/cli/php.ini with new version
S'està configurant libapache2-mod-php8.3 (8.3.9-1+ubuntu22.04.1+deb.sury.org+1)…
Creating config file /etc/php/8.3/apache2/php.ini with new version
libapache2-mod-php8.3: php7.4 module already enabled, not enabling PHP 8.3
S'està configurant php8.3 (8.3.9-1+ubuntu22.04.1+deb.sury.org+1)…
S'està configurant libapache2-mod-php (2:8.3+94+ubuntu22.04.1+deb.sury.org+2)…
S'està configurant php (2:8.3+94+ubuntu22.04.1+deb.sury.org+2)…
S'estan processant els activadors per a man-db (2.10.2-1)…
S'estan processant els activadors per a php8.3-cli (8.3.9-1+ubuntu22.04.1+deb.sury.org+1)…
S'estan processant els activadors per a libapache2-mod-php8.3 (8.3.9-1+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.
Això instal·la:
- El motor PHP (per interpretar codi).
- El mòdul libapache2-mod-php que enllaça PHP amb Apache.
Per comprovar quina versió s’instal·larà es pot utilitzar:
apt-cache policy libapache2-mod-php
Fitxers de configuració de PHP
El PHP també té fitxers de configuració per definir certs paràmetres. Caldrà que reviseu la part específica dels fitxers de /etc/php/versió/apache2/
si necessiteu alguna cosa especial o hi ha algun problema.
Després d’instal·lar, PHP té configuracions pròpies a:
/etc/php/8.3/apache2/
Allà podem ajustar paràmetres com:
- upload_max_filesize → mida màxima de fitxers pujats.
- memory_limit → memòria disponible per scripts.
- error_reporting → nivells de registre d’errors.
Al instal·lar el paquet libapache2-mod-php
apache2 ja té el mòdul de PHP habilitat. Ho comprovem amb la comanda apache2ctl -M | grep php
i hauria de sortir una línia semblant a:
php8.3_module (shared)
Igualment aprendre'm a gestionar els mòduls més endavant i activar i desactivar el mòdul de PHP.
Prova ràpida de PHP
Per comprovar que tot funciona:
-
Crear un fitxer info.php a /var/www/html/ amb el contingut:
<?php phpinfo(); ?>
-
Obrir el navegador i anar a:
http://IPdelServidor/info.php
Si tot està correcte, apareixerà la pàgina amb informació del PHP instal·lat.
Recordeu que Apache segueix una estructura modular en el qual es poden afegir nous mòduls i així afegir o activar noves funcionalitats.
Si decidim accedir a fitxers php que tinguem al directori /var/www/html
, el servidor apache, encara no sap que ha d'interpretar el llenguatge php. Afegiu el fitxer info.php al directori /var/www/html
i accedim a http://ipDelServidor.cat/info.php.
Si reiniciem l'apache systemctl restart apache2.service
i accedim a http://ipDelServidor.cat/info.php ja funcionarà, ja que la instal·lació ens ha habilitat el mòdul PHP de l'apache.
En cas que no funcionés caldria habilitar el mòdul manualment.
Activar i desactivar mòduls en Apache. Habilitem el PHP de backend
Els mòduls a Apache es gestionen amb fitxers i comandes específiques:
-
A /etc/apache2/mods-available/ → hi ha els mòduls disponibles.
-
A /etc/apache2/mods-enabled/ → hi ha els mòduls activats (via symlink).
Amb els mòduls, trobareu dos tipus de fitxers, els acabats en .load i els acabats en .conf.
Cada mòdul sol tenir:
-
Un fitxer .load → ruta del binari de la llibreria.
-
Un fitxer .conf → configuració del mòdul a aplicar.
Comandes de gestió
-
Activar un mòdul
Per gestionar els mòduls (activar/desactivar) tenim les següents comandes
sudo a2enmod nomdelmodul sudo a2dismod nomdelmodul
Per habilitar el mòdul PHP i reiniciar el servei caldria executar les comandes
Fer aquest tipus de canvis ens obliga a fer un reinici del servei.Per deshabilitar el mòdul PHP i reiniciar el servei caldria executar les comandessudo a2enmod php8.3 sudo service apache2 restart
sudo a2dismod php8.3 sudo service apache2 restart
Per Nginx caldrà fer la instal·lació del servei php-fpm
i configurar posteriorment el servidor Nginx.
Això està explicat més endavant en el tema de Multiversió.
i Nginx?
Per saber amb quins mòduls s'ha compilat el nostre servidor Nginx executarem la comanda
nginx -V 2>&1|xargs -n1|grep module
i una possible sortida serà
--modules-path=/usr/lib/nginx/modules
--with-http_ssl_module
--with-http_stub_status_module
--with-http_realip_module
--with-http_auth_request_module
--with-http_v2_module
--with-http_dav_module
--with-http_slice_module
--add-dynamic-module=/build/nginx-zctdR4/nginx-1.18.0/debian/modules/http-geoip2
--with-http_addition_module
--with-http_gunzip_module
--with-http_gzip_static_module
--with-http_sub_module