{{tag>tutoriel}}
====== De Nginx à Apache : remplacer Nginx par Apache sans perdre les données du site Web et avec le minimum de temps d'arrêt ======
===== Introduction =====
Voici un tuto pour implémenter Apache MPM Event associé au PHP-FPM sur les distributions Fedora / CentOS / Red Hat !
J’ai mis en production Nginx depuis plusieurs mois et l’essai, à vrai dire, est peu concluant. Complexité de la configuration, complication à mettre en place Awstats, pas de .htaccess, modules à compiler du fait de leur indisponibilité, plantages intempestifs inexpliqués … Du coup, j’ai décidé de revenir à ce bon vieux Apache, plus riche, plus simple.
**Apache en mode PHP-FPM** : Nginx utilise le PHP en mode CGI, en s’appuyant sur PHP-FPM (PHP FastCGI Process Manager). Vous pouvez en faire de même sur un serveur Apache.
===== Pré-requis =====
===== Première étape =====
- **Installez [[apt>php-fpm]]** ...@...:~$ sudo apt install php-fpm
- **Configurez PHP-FPM** : créez un fichier de pool par site, sur la base du fichier /etc/php/7.4/fpm/pool.d/www.conf (Remplacez www par le nom de votre site) :
(...)
#~ [www]
[monsite]
(...)
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = www-data
group = www-data
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on
; a specific port;
; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses
; (IPv6 and IPv4-mapped) on a specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php/php7.4-fpm.sock
(...)
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
; mode is set to 0660
listen.owner = www-data
listen.group = www-data
;listen.mode = 0660
; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
#~ ;listen.acl_users =
#~ ;listen.acl_groups =
listen.acl_users = www-data
listen.acl_groups = www-data
; List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect.
; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original
; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address
; must be separated by a comma. If this value is left blank, connections will be
; accepted from any ip address.
; Default Value: any
#~ ;listen.allowed_clients = 127.0.0.1
listen.allowed_clients = 127.0.0.1
(...)
- **modules Apache** :
- Utilisez le module multi-processus **Event** : Éditez avec les droits d'administration le fichier **/etc/httpd/conf.modules.d/00-mpm.conf** pour le modifier comme ceci :
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
LoadModule mpm_event_module modules/mod_mpm_event.so
- Pour éviter les conflits, éditez avec les droits d'administration le fichier **/etc/httpd/conf.modules.d/00-proxy.conf** pour désactiver les modules qui ne sont pas nécessaires :
LoadModule proxy_module modules/mod_proxy.so
#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
#LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
#LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
- **Configuration du VirtualHost** : Dans la configuration du VirtualHost, ajoutez les directives correspondant au mode socket
DocumentRoot "/home/www"
ServerAdmin dszalkowski@gmail.com
ServerName 195.154.102.202:80
ServerAlias 2001:bc8:34b7:200::
ErrorLog logs/srv2-error_log
CustomLog logs/srv2-access_log combined env=!dontlog
#En mode socket
SetHandler "proxy:unix:/run/php-fpm/srv2.sock|fcgi://127.0.0.1"
#En mode application Tcp/Ip
#ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/home/www/$1
===== Autres étapes =====
===== Conclusion =====
===== Problèmes connus =====
===== Voir aussi =====
* **(fr)** [[https://www.dsfc.net/infra/lamp-infrastructure/abandon-de-nginx-pour-apache-et-php-fpm/]]
----
//Basé sur << [[https://www.dsfc.net/infra/lamp-infrastructure/abandon-de-nginx-pour-apache-et-php-fpm/|Abandon de Nginx pour Apache et PHP-FPM]] >> par Denis Szalkowski.//