GNU/Linux >> Tutoriels Linux >  >> FreeBSD

Migration d'Apache vers Nginx sur FreeBSD

Dans cet article, je vais vous expliquer comment j'ai migré mes serveurs exécutant Apache+PHP vers Nginx+PHP-fpm sans diy le processus.

Scénario

[Passer l'introduction]

En 2020, pendant les premiers jours de la pandémie, nous avons eu une réunion en préparation de la prochaine quarantaine. Le plan était de continuer à faire passer tous nos étudiants présentiels à un enseignement à distance complet. J'ai demandé à combien d'étudiants supplémentaires je devais m'attendre et ils ont parlé du double. Ensuite, ma suggestion était simplement de dupliquer les ressources matérielles (mémoire vive et cœurs de processeur) parce que :

  • Heureusement, j'ai assez de place - en termes de ressources matérielles - pour ce type de croissance.
  • la quarantaine sera terminée dans seulement deux semaines, un mois au maximum. Ensuite, nos élèves reviendront au présentiel et je récupérerai ces ressources supplémentaires.

Au cours des deux premières semaines de la quarantaine d'origine, j'ai dû augmenter de plus en plus les ressources matérielles (sans les dupliquer) et cette solution s'est avérée insuffisante. Après le premier mois, avec les examens qui se rapprochaient chaque jour, et la crise du covid19 menaçant de s'étendre jusqu'à l'été, il fallait que je pense à un vrai Solution. De plus, cette solution doit être réalisée avec le moins de temps d'arrêt possible … nous avons déjà eu assez de plantages d'humeur.

Encore une fois, j'ai de la chance d'avoir encore quelques Go de RAM et de cœurs de processeur disponibles. J'ai configuré une toute nouvelle machine virtuelle (1 cœur et 1 Go de RAM) avec une copie de l'un de mes moodles de production, pour tester les choses jusqu'à ce que cela fonctionne. Une fois que j'ai obtenu les paramètres qui le font, je pourrais faire le changement sans temps d'arrêt. Le dernier changement consiste à arrêter apache et démarrer nginx

L'installation

Nginx

Si vous avez lu certains de mes articles précédents sur FreeBSD, je préfère les ports aux packages binaires, donc pour installer nginx, exécutez :

# cd /usr/ports/www/nginx
# make install clean

Php-fpm

La manière par défaut d'exécuter du code php dans Apache est d'activer le module mod_php. Il n'y a pas (du moins que je sache) de module chargeable nginx pour PHP, vous devez donc activer fastCGI Process Manager. Si vous avez installé PHP avec les options par défaut, vous l'avez probablement déjà, mais vérifiez bien :

[/usr/ports/www/nginx]# cd ../../lang/php74
[/usr/ports/lang/php74]# make config

Si FPM n'est pas sélectionné, sélectionnez-le, puis exécutez :

[/usr/ports/lang/php74]# make install clean

La configuration

PHP-Fpm

Créez, s'il n'existe pas le fichier /usr/local/etc/php-fpm.d/www.conf en copiant www.conf.default puis éditez :

[/usr/ports/lang/php74]# cd /usr/local/etc/php-fpm.d/
[/usr/local/etc/php-fpm.d/]# cp www.conf.default www.conf
[/usr/local/etc/php-fpm.d/]# ee www.conf

Faites défiler jusqu'aux options pertinentes :

  • user/group :devrait être le même utilisateur et groupe qu'apache, www pour moi.
  • listen :comme je ne sers php que localement, j'utilise un socket unix :/var/run/php-fpm.sock;
  • pm :dynamic est bien, mais vous devrez peut-être modifier et ajuster ce paramètre. Jetez un œil aux commentaires dans le fichier.

Enfin, activons et démarrons php-fpm :

[/usr/local/etc/php-fpm.d/] /usr/local/etc/rc.d/php-fpm enable
[/usr/local/etc/php-fpm.d/] /usr/local/etc/rc.d/php-fpm start

Nginx

Le fichier nginx.conf peut être aussi volumineux (ou divisé en autant de parties) que le fichier httpd.conf d'Apache. En particulier si vous avez plusieurs VirtualHosts, les options pertinentes sont (du moins pour moi où) :

  • user :le même utilisateur que le processus apache, par exemple, www.
  • worker_process  :cela doit correspondre au nombre de cœurs du processeur
  • client_max_body_size  :doit correspondre aux valeurs de post_max_size et upload_max_size dans php.ini.
  • root :égal à DocumentRoot depuis votre VirtualHost dans apache httpd.conf, c'est-à-dire /usr/local/www/
  • Ajoutez la section suivante pour indiquer à nginx comment envoyer votre code php au service php-fpm :
location ~ [^/]\.php(/|$) {
            fastcgi_split_path_info     ^(.+\.php)(/.+)$;
            fastcgi_index               index.php;
            fastcgi_pass                unix:/var/run/php-fpm.sock;
            include                     fastcgi_params;
            fastcgi_param  PATH_INFO    $fastcgi_path_info;
            fastcgi_param  SCRIPT_FILENAME      $document_root$fastcgi_script_name;
            fastcgi_read_timeout 120;
            fastcgi_send_timeout 120;
        }

Les autres options du fichier d'exemple nginx.conf sont assez explicites. Bien sûr, il y a beaucoup d'autres choses que vous pouvez modifier, mais cela ferait la magie.

Enfin, nous pouvons activer nginx, arrêter apache et démarrer nginx (dans cet ordre, sinon nginx pourra écouter sur les ports http/https) :

# /usr/local/etc/rc.d/nginx enable
# /usr/local/etc/rc.d/apache24 stop
# /usr/local/etc/rc.d/nginx start

En cas de problème

Notez que nous n'avons pas encore désactivé apache. Si quelque chose ne va pas, arrêtez simplement nginx et démarrez apache24 pour savoir qu'il fonctionnait déjà correctement :

# /usr/local/etc/rc.d/apache24 stop ; /usr/local/etc/rc.d/nginx start

Lorsque vous êtes sûr que tout fonctionne comme prévu, vous pouvez désactiver apache.


FreeBSD
  1. Installation du serveur Web dans FreeBSD 6.0 avec Apache 2.2, MySQL 5.0 et PHP 5 - Partie 5

  2. Installation du serveur Web dans FreeBSD 6.0 avec Apache 2.2, MySQL 5.0 et PHP 5 - Partie 4

  3. Installation du serveur Web dans FreeBSD 6.0 avec Apache 2.2, MySQL 5.0 et PHP 5 - Partie 3

  4. Installation du serveur Web dans FreeBSD 6.0 avec Apache 2.2, MySQL 5.0 et PHP 5 - Partie 2

  5. Installation du serveur Web dans FreeBSD 6.0 avec Apache 2.2, MySQL 5.0 et PHP 5 - Partie 1

Installez Nginx + MariaDB + PHP sur Fedora 27 / Fedora 26

Comment créer un serveur de streaming dans FreeBSD

Comment sécuriser Apache avec SSL et Let's Encrypt dans FreeBSD

Installer Apache et PHP sur CentOS 8

Comment installer FAMP (FreeBSD 10, Apache, MySQL, PHP) sur un serveur Cloud ou VPS

Comment installer FEMP (FreeBSD 10, Nginx, MySQL, PHP) sur un serveur Cloud ou VPS