{{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.//