Introduzione ad NGINX

Condividi
Introduzione ad NGINX
Il logo di NGINX

Cosa è NGINX? Ve lo lascio presentare direttamente dal sito ufficiale, che dice:

NGINX ("engine x") è un HTTP web server, reverse proxy, content cache, load balancer, TCP/UDP proxy server e mail proxy server

NGINX è un software magnifico, ma non certo senza difetti. Uno tra tutti, non ha un'interfaccia grafica.

Questa mancanza in realtà ha un suo perché: NGINX deve tassativamente essere il più leggero possibile, perché deve avere un overhead minimo e garantire quindi di poter usare il massimo delle risorse del sistema per svolgere il suo lavoro.

Di contro, anche se la sua configurazione è fatta interamente da file molto basici, una volta che se ne capisce il funzionamento risulta molto semplice:

  • il file /etc/nginx/nginx.conf contiene le impostazioni base di NGINX, che si applicano a tutte le sue funzionalità.
  • nel file nginx.conf sono presenti delle direttive "include" che puntano ad uno o più files esterni, presenti nel filesystem, come i file presenti nella cartella /etc/nginx/sites-enabled
  • i files in /sites-enabled sono dei symlink ai files veri e propri, presenti in /etc/nginx/sites-available
  • i files in /sites-available contengono un set di regole relative ad un site

Non si tratta di un requisito fondamentale per NGINX (infatti si possono tranquillamente usare dei file statici in questa cartella), ma di una comodità.

Non c'è infatti modo in NGINX di creare una regola ma lasciarla disattivata. Usando i symlink invece, si può creare una regola in /sites-available e non creare il suo symlink in /sites-enabled finchè non la si vuole attivare.

Installazione di NGINX

(testato su Ubuntu Server 24.04)

Installare NGINX è un gioco da ragazzi, dato che è disponibile nelle repository di default di apt.

sudo apt install nginx -y

Potete quindi monitorare lo status di NGINX

sudo systemctl status nginx

Se dovesse servirvi farlo manualmente, potete far ricaricare ad NGINX le modifiche che avete apportato usando il comando reload, senza doverlo riavviare completamente.

sudo systemctl reload nginx

Prima configurazione di NGINX

Di seguito vi consiglio alcuni passaggi di configurazione che vi permettono di prendere dimestichezza con la gestione "a mano" di NGINX.

pagina di status

Se avete intenzione di monitorare NGINX tramite Telegraf, Prometheus e Grafana, prima di tutto dovrete creare una pagina web in cui NGINX scriva le sue metriche.

Per fare ciò, creiamo un nuovo site in /etc/nginx/sites-available/ chiamato nginx_status

nano /etc/nginx/sites-available/nginx_status

Andiamo ad indicare il contenuto del site

server {
    listen 88;
    location /nginx_status {
        stub_status on;
        access_log off;
        allow all;
    }
}

E creiamo un symlink a questo file in sites-enabled

ln -s /etc/nginx/sites-available/nginx_status /etc/nginx/sites-enabled/nginx_status

Ricarichiamo le modifiche effettuate

sudo systemctl reload nginx

Adesso accedendo a http://indirizzo.IP.di.NGINX:88/nginx_status saremo accolti dalla pagina di status.

Aumentare il numero di workers

In vari ambienti, di produzione e non, mi sono imbattuto spesso nell'errore not enough worker_connections.

Questo errore ci dice che NGINX non ha più processi worker a cui assegnare le richieste che gli stanno arrivando.

Possiamo aumentare manualmente il limite massimo del numero di worker che NGINX può spawnare, modificando il file nginx.conf

nano /etc/nginx/nginx.conf

e modificando, all'interno della sezione events il parametro worker_connections

events {
  ...
  worker_connections 20000;
  ...
}

Riavviamo NGINX per applicare le modifiche

sudo systemctl restart nginx