GNU/Linux >> LINUX-Kenntnisse >  >> FreeBSD

Migration von Apache zu Nginx unter FreeBSD

In diesem Artikel erzähle ich Ihnen, wie ich meine Server mit Apache+PHP auf Nginx+PHP-fpm migriert habe, ohne den Prozess zu beenden.

Szenario

[Einleitung überspringen]

2020 hatten wir in den ersten Tagen der Pandemie ein Treffen zur Vorbereitung auf die bevorstehende Quarantäne. Der Plan war, weiterhin alle unsere gegenwärtigen Schüler in den vollständigen Fernunterricht zu überführen. Ich habe gefragt, mit wie vielen zusätzlichen Schülern ich rechnen soll, und sie sagten über das Doppelte. Als nächstes war mein Vorschlag, nur die Hardware-Ressourcen (RAM &CPU-Kerne) zu duplizieren, weil:

  • Glücklicherweise habe ich genug Platz - in Bezug auf Hardware-Ressourcen - für diese Art von Wachstum.
  • Die Quarantäne wird in nur zwei Wochen, höchstens einem Monat, vorbei sein. Dann kehren unsere Schüler zur Gegenwart zurück und ich erhalte diese zusätzlichen Ressourcen zurück.

Während der ersten zwei Wochen der ursprünglichen Quarantäne musste ich die Hardwareressourcen immer weiter erhöhen (aber nicht duplizieren), und diese Lösung erwies sich als unzureichend. Nach dem ersten Monat, mit den Prüfungen, die jeden Tag näher rückten, und der Covid-19-Krise, die drohte, sich sogar bis zum Sommer auszudehnen, musste ich an eine echte denken Lösung. Auch diese Lösung muss mit möglichst geringer Ausfallzeit erfolgen … wir hatten schon genug Moodle-Abstürze.

Zum Glück habe ich noch ein paar GB RAM und CPU-Kerne zur Verfügung. Ich habe eine winzige neue VM (1 Kern und 1 GB RAM) mit einer Kopie einer meiner Produktionsstimmungen eingerichtet, um die Dinge zu testen, bis es funktioniert. Sobald ich die entsprechenden Einstellungen habe, kann ich die Änderung ohne Ausfallzeiten vornehmen. Die letzte Änderung besteht darin, Apache herunterzufahren und nginx zu starten

Die Installation

Nginx

Wenn Sie einige meiner vorherigen Posts in FreeBSD gelesen haben, bevorzuge ich die Ports gegenüber den Binärpaketen, also führen Sie zur Installation von nginx Folgendes aus:

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

Php-fpm

Die Standardmethode zum Ausführen von PHP-Code in Apache ist die Aktivierung des Moduls mod_php. Es gibt (zumindest soweit ich weiß) kein ladbares Nginx-Modul für PHP, daher müssen Sie den fastCGI Process Manager aktivieren. Wenn Sie PHP mit den Standardoptionen installiert haben, haben Sie es wahrscheinlich bereits, aber überprüfen Sie es noch einmal:

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

Wenn FPM nicht ausgewählt ist, wählen Sie es aus und führen Sie dann Folgendes aus:

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

Die Konfiguration

PHP-Fpm

Erstellen Sie, falls nicht vorhanden, die Datei /usr/local/etc/php-fpm.d/www.conf, indem Sie www.conf.default kopieren, und bearbeiten Sie dann:

[/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

Scrollen Sie nach unten zu den relevanten Optionen:

  • user/group :sollte der gleiche Benutzer und die gleiche Gruppe sein wie Apache, www für mich.
  • listen :Da ich PHP nur lokal bereitstelle, verwende ich einen Unix-Socket:/var/run/php-fpm.sock;
  • pm :dynamic ist in Ordnung, aber Sie müssen diesen Parameter möglicherweise optimieren und optimieren. Sehen Sie sich die Kommentare in der Datei an.

Lassen Sie uns schließlich php-fpm aktivieren und starten:

[/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

Die nginx.conf-Datei könnte so groß sein (oder in so viele Teile aufgeteilt worden sein wie) wie die httpd.conf von Apache. Insbesondere wenn Sie mehrere VirtualHosts haben, sind die relevanten Optionen (zumindest für mich wo) :

  • user :derselbe Benutzer wie der Apache-Prozess, zum Beispiel www.
  • worker_process :Dies sollte der Anzahl der CPU-Kerne entsprechen
  • client_max_body_size :sollte mit den Werten von post_max_size übereinstimmen und upload_max_size in php.ini.
  • root :entspricht DocumentRoot von Ihrem VirtualHost in Apache httpd.conf, also /usr/local/www/
  • Fügen Sie den nächsten Abschnitt hinzu, um nginx mitzuteilen, wie es Ihren PHP-Code an den php-fpm-Dienst senden soll:
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;
        }

Die anderen Optionen in der Beispieldatei nginx.conf sind ziemlich selbsterklärend. Natürlich gibt es viele andere Dinge, die Sie optimieren können, aber das würde den Zauber vollbringen.

Schließlich können wir nginx aktivieren, Apache stoppen und nginx starten (in dieser Reihenfolge oder nginx wäre in der Lage, http/https-Ports abzuhören):

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

Wenn etwas schief geht

Beachten Sie, dass wir Apache noch nicht deaktiviert haben. Wenn etwas schief geht, stoppen Sie einfach nginx und starten Sie Apache24, damit Sie wissen, dass es bereits gut funktioniert hat:

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

Wenn Sie sicher sind, dass alles wie erwartet funktioniert, können Sie Apache deaktivieren.


FreeBSD
  1. So installieren Sie Nginx, MariaDB und PHP (FEMP) Stack auf FreeBSD

  2. So installieren Sie Apache, MariaDB und PHP (FAMP) Stack auf FreeBSD

  3. Wie kann ich PHP von 5.3.x auf 5.2.x downgraden?

  4. Installation des Webservers in FreeBSD 6.0 mit Apache 2.2, MySQL 5.0 und PHP 5 – Teil 2

  5. Installation des Webservers in FreeBSD 6.0 mit Apache 2.2, MySQL 5.0 und PHP 5 – Teil 1

Installieren Sie Nginx + MariaDB + PHP auf Fedora 27 / Fedora 26

So erstellen Sie einen Streaming-Server in FreeBSD

So sichern Sie Apache mit SSL und Let’s Encrypt in FreeBSD

Installieren von Apache und PHP unter CentOS 8

So installieren Sie FAMP (FreeBSD 10, Apache, MySQL, PHP) auf einem Cloud- oder VPS-Server

So installieren Sie FEMP (FreeBSD 10, Nginx, MySQL, PHP) auf einem Cloud- oder VPS-Server