GNU/Linux >> Znalost Linux >  >> FreeBSD

Migrace z Apache na Nginx na FreeBSD

V tomto článku vám řeknu, jak jsem migroval své servery se systémem Apache+PHP na Nginx+PHP-fpm, aniž bych tento proces musel zvládnout.

Scénář

[Přeskočit úvod]

V roce 2020, během prvních dnů pandemie, jsme měli setkání v rámci přípravy na nadcházející karanténu. Plán byl pokračovat v přesunu všech našich současných studentů do úplného dálkového vzdělávání. Zeptal jsem se, kolik studentů navíc bych měl očekávat, a řekli o dvojnásobku. Dále jsem navrhl pouze duplikovat hardwarové prostředky (jádra RAM a procesoru), protože:

  • naštěstí mám dostatek místa – pokud jde o hardwarové zdroje – pro tento druh růstu.
  • karanténa skončí za pouhé dva týdny, maximálně měsíc. Potom se naši studenti vrátí k prezentaci a já dostanu zpět tyto dodatečné zdroje.

Během prvních dvou týdnů původní karantény jsem musel stále více navyšovat hardwarové zdroje (ale ne je duplikovat) a toto řešení se ukázalo jako nedostatečné. Po prvním měsíci, kdy se zkoušky každým dnem přibližovaly a krize covid19 hrozila rozšířit až do léta, jsem musel myslet na skutečný řešení. Také toto řešení musí být provedeno s co nejmenšími prostoji … už jsme měli dost náladových pádů.

Opět mám štěstí, že mám stále k dispozici několik GB RAM a CPU jader. Nastavil jsem malý nový VM (1 jádro a 1 GB RAM) s kopií jednoho z mých produkčních nálad, abych věci testoval, dokud to nebude fungovat. Jakmile získám nastavení, která to dělají, mohl jsem provést změnu bez prostojů. Poslední změna spočívá v vypnutí apache a spuštění nginx

Instalace

Nginx

Pokud jste četli některé z mých předchozích příspěvků ve FreeBSD, preferuji porty před binárními balíčky, takže pro instalaci nginx spusťte:

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

Php-fpm

Výchozí způsob, jak spustit php kód uvnitř Apache, je povolení modulu mod_php. Neexistuje (alespoň to vím) modul pro načítání nginx pro PHP, takže musíte povolit fastCGI Process Manager. Pokud jste nainstalovali PHP s výchozími možnostmi, pravděpodobně je již máte, ale ještě jednou zkontrolujte:

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

Pokud FPM není vybráno, vyberte jej a spusťte:

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

Konfigurace

PHP-Fpm

Vytvořte, pokud neexistuje, soubor /usr/local/etc/php-fpm.d/www.conf zkopíruji www.conf.default a poté upravte:

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

Přejděte dolů na příslušné možnosti:

  • user/group :by měl být stejný uživatel a skupina jako apache, pro mě www.
  • listen :protože php poskytuji pouze lokálně, používám unixový soket:/var/run/php-fpm.sock;
  • pm :dynamic je v pořádku, ale možná budete muset tento parametr upravit a vyladit. Podívejte se na komentáře v souboru.

Nakonec povolme a spusťte 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

Soubor nginx.conf může být stejně velký (nebo může být rozdělen na tolik částí) jako httpd.conf z Apache. Zvláště pokud máte několik VirtualHostů, relevantní možnosti jsou (alespoň pro mě kde):

  • user :stejný uživatel jako proces Apache, například www.
  • worker_process :toto by mělo odpovídat počtu jader CPU
  • client_max_body_size :měl by odpovídat hodnotám post_max_size a upload_max_size v php.ini.
  • root :rovná se DocumentRoot z vašeho VirtualHost v Apache httpd.conf, tj. /usr/local/www/
  • Přidejte další sekci a sdělte nginxu, jak odeslat váš php kód do služby 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;
        }

Ostatní možnosti v příkladu souboru nginx.conf jsou do značné míry samozřejmé. Samozřejmě existuje spousta dalších věcí, které můžete vyladit, ale tohle by udělalo kouzlo.

Nakonec můžeme povolit nginx, zastavit apache a spustit nginx (v tomto pořadí by nginx mohl naslouchat na portech http/https):

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

Pokud se něco pokazí

Všimněte si, že jsme ještě nezakázali apache. Pokud se něco pokazí, zastavte nginx a spusťte apache24, o kterém víte, že již fungoval dobře:

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

Když jste si jisti, že vše funguje podle očekávání, můžete apache deaktivovat.


FreeBSD
  1. Jak nainstalovat Nginx, MariaDB a PHP (FEMP) Stack na FreeBSD

  2. Jak nainstalovat Apache, MariaDB a PHP (FAMP) Stack na FreeBSD

  3. Jak downgradovat PHP z 5.3.x na 5.2.x?

  1. Instalace webového serveru ve FreeBSD 6.0 s Apache 2.2, MySQL 5.0 a PHP 5 – část 5

  2. Instalace webového serveru ve FreeBSD 6.0 s Apache 2.2, MySQL 5.0 a PHP 5 – část 2

  3. Instalace webového serveru ve FreeBSD 6.0 s Apache 2.2, MySQL 5.0 a PHP 5 – část 1

  1. Instalace webového serveru ve FreeBSD 6.0 s Apache 2.2, MySQL 5.0 a PHP 5 – část 4

  2. Instalace webového serveru ve FreeBSD 6.0 s Apache 2.2, MySQL 5.0 a PHP 5 – část 3

  3. Jak zastavit nginx v používání portu 80