GNU/Linux >> Linux Esercitazione >  >> FreeBSD

Migrazione da Apache a Nginx su FreeBSD

In questo articolo ti spiegherò come ho migrato i miei server che eseguono Apache+PHP su Nginx+PHP-fpm senza interrompere il processo.

Scenario

[Salta introduzione]

Nel 2020, durante i primi giorni della pandemia, abbiamo avuto un incontro in preparazione all'imminente quarantena. Il piano era di continuare a trasferire tutti i nostri studenti presenti all'istruzione a distanza completa. Ho chiesto quanti studenti in più dovrei aspettarmi e mi hanno detto del doppio. Successivamente, il mio suggerimento era solo di duplicare le risorse hardware (core ram e CPU) perché:

  • fortunatamente ho abbastanza spazio -in termini di risorse hardware- per quel tipo di crescita.
  • la quarantena finirà in sole due settimane, un mese al massimo. Quindi i nostri studenti torneranno alla presentazione e io riprenderò quelle risorse extra.

Durante le prime due settimane della quarantena originale ho dovuto aumentare sempre di più le risorse hardware (ma non duplicandole) e quella soluzione si è rivelata insufficiente. Dopo il primo mese, con gli esami più vicini ogni giorno, e la crisi covid19 che minacciava di estendersi anche all'estate, ho dovuto pensare a un vero soluzione. Anche questa soluzione deve essere realizzata con il minor tempo di inattività possibile ... abbiamo già avuto abbastanza arresti anomali dell'umore.

Ancora una volta, fortunatamente ho ancora un paio di GB di RAM e core CPU disponibili. Ho impostato una nuova minuscola VM (1 core e 1 GB di RAM) con una copia di uno dei miei moodle di produzione, per testare le cose fino a quando non ha funzionato. Una volta ottenute le impostazioni che lo fanno, potrei apportare la modifica senza tempi di inattività. La modifica finale consiste nello spegnimento di Apache e nell'avvio di nginx

L'installazione

Nginx

Se leggi alcuni dei miei post precedenti su FreeBSD preferisco i port ai pacchetti binari, quindi per installare nginx esegui:

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

Php-fpm

Il modo predefinito per eseguire il codice php all'interno di Apache è abilitare il modulo mod_php. Non esiste (almeno che io sappia) un modulo caricabile nginx per PHP, quindi è necessario abilitare fastCGI Process Manager. Se hai installato PHP con le opzioni predefinite, probabilmente lo hai già, ma ricontrolla:

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

Se FPM non è selezionato, selezionalo, quindi esegui:

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

La configurazione

PHP-Fpm

Crea, se non esiste il file /usr/local/etc/php-fpm.d/www.conf my copying www.conf.default e poi modifica:

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

Scorri verso il basso fino alle opzioni pertinenti:

  • user/group :dovrebbe essere lo stesso utente e gruppo di apache, www per me.
  • listen :poiché sto servendo php solo localmente, sto usando un socket unix:/var/run/php-fpm.sock;
  • pm :dynamic va bene, ma potrebbe essere necessario modificare e regolare questo parametro. Dai un'occhiata ai commenti nel file.

Infine, abilitiamo e avviamo 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

Il file nginx.conf potrebbe essere grande (o diviso in tante parti quante) quanto httpd.conf di apache. In particolare se hai più VirtualHost, le opzioni rilevanti sono (almeno per me dove):

  • user :lo stesso utente del processo apache, ad esempio www.
  • worker_process :dovrebbe corrispondere al numero di core della CPU
  • client_max_body_size :dovrebbe corrispondere ai valori di post_max_size e upload_max_size in php.ini.
  • root :è uguale a DocumentRoot dal tuo VirtualHost in apache httpd.conf, ovvero /usr/local/www/
  • Aggiungi la sezione successiva per dire a nginx come inviare il tuo codice php al servizio 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;
        }

Le altre opzioni nel file di esempio nginx.conf sono praticamente autoesplicative. Naturalmente, ci sono molte altre cose che puoi modificare, ma questo farebbe la magia.

Finalmente possiamo abilitare nginx, fermare apache e avviare nginx (in quell'ordine o nginx sarebbe in grado di ascoltare nelle porte http/https):

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

Se qualcosa va storto

Nota che non abbiamo ancora disabilitato Apache. Se qualcosa va storto, basta interrompere nginx e avviare apache24 per sapere che stava già funzionando bene:

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

Quando sei sicuro che tutto funzioni come previsto, puoi disabilitare Apache.


FreeBSD
  1. Installazione di Web Server in FreeBSD 6.0 con Apache 2.2, MySQL 5.0 e PHP 5 – Parte 5

  2. Installazione di Web Server in FreeBSD 6.0 con Apache 2.2, MySQL 5.0 e PHP 5 – Parte 4

  3. Installazione di Web Server in FreeBSD 6.0 con Apache 2.2, MySQL 5.0 e PHP 5 – Parte 3

  4. Installazione di Web Server in FreeBSD 6.0 con Apache 2.2, MySQL 5.0 e PHP 5 – Parte 2

  5. Installazione di Web Server in FreeBSD 6.0 con Apache 2.2, MySQL 5.0 e PHP 5 – Parte 1

Installa Nginx + MariaDB + PHP su Fedora 27 / Fedora 26

Come creare un server di streaming in FreeBSD

Come proteggere Apache con SSL e Let's Encrypt in FreeBSD

Installazione di Apache e PHP su CentOS 8

Come Installare FAMP (FreeBSD 10, Apache, MySQL, PHP) su un Server Cloud o VPS

Come installare FEMP (FreeBSD 10, Nginx, MySQL, PHP) su un server Cloud o VPS