Configurazione

Sintassi

La sintassi dei file di configurazione di Nginx è piuttosto semplice e ricorda quella dei linguaggi C-like.

Le varie opzioni che è possibile specificare nel file di configurazione sono dette direttive. Una direttiva può essere semplice, ovvero contenere un solo valore, o composta, ovvero costituita da più campi.

Una direttiva semplice è costituita da un nome (che identifica l'opzione da configurare), un valore (da assegnare all'opzione relativa) e termina con il carattere punto e virgola (;). Nome e valore sono separati da uno spazio.

Le direttive composte sono dette blocchi. Esse non terminano con il carattere punto e virgola. Sono invece seguite da un blocco di direttive ad esse associate delimitato da parentesi graffe. Nel gergo di Nginx, un blocco contenente delle direttive crea un contesto.

Parametri di Configurazione

I file di configurazione hanno parametri distribuiti in sezioni o contesti, che sono:

  • nessuna sezione - parametri globali, all'inizio della configurazione
  • events{...} - controllo degli MPM, secondo l'architettura event MPM
  • http{...} - relativi al protocollo HTTP
  • server{... } - relativi al server stesso

Ciascun parametro è terminato da punto e virgola (;). Per comprensibilità ogni parametro è sulla sua riga. I commenti sono preceduti da # e vanno a fine riga.

Ispezioniamo i parametri di default.

Parametri Globali

  • user nginx - l'tente coi cui permessi gira il server. Usare root è pericoloso.
  • worker_processes auto - il mumero di workers. Si può sostituire auto con un numero intero, almeno 1. auto alloca un core della CPU al processo master e i rimanenti core ciascuno ad un processo worker.
  • error_log - la locazione del log degli errori e il livello minimo di errore
  • pid - ove viene registrato il PID del processo, per poter inviargli dei segnali

Sezione events

  • worker_connections 1024 - quante connessioni client consecutive un worker può accettare nella stessa sessione

Sezione http

  • include /etc/nginx/mime.types - file con i tipi MIME e le corrispondenti estensioni
  • default_type application/octet-stream - tipo MIME di default
  • log:format - nome e struttura di un formato di log
  • access_log - locazione del file di log degli accessi e formato usato
  • sendfile on - usa la system call sendfile del kernel per l'invio di files
    • sendfile_max_chunk - dimensione massima di ogni segmento inviato con sendfile
  • #tcp_nopush on - disabilitazione del flag TCP PSH, che implementa lo Interactive Transfer a bassa latenza
  • keepalive_timeout 65 - intervallo massimo tra le richieste
  • #gzip on - compressione ``gzip` dei responsi
  • ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3 - protocolli SSL/TLS accettati

Sezione server

  • listen 80 - porta d'ascolto
  • server_name localhost - nome del server
  • location / {...} - parametri di un path, qui il percorso radice
    • root /usr/share/nginx/html - equivalente della DocumentRoot di Apache
    • index index.html index.htm - nomi dei file HTML di default
    • try_files $uri $uri/ =404 - prova prima a servire la richiesta come file, poi come directory, infine da l'errore 404
  • `location /admin {...}
    • alias /var/www/reserved - crea un alias per la location `/admin
  • error_page - pagine di errore customizzate

Esempi di Configurazione

Configurazione minima per Pagine Statiche

user nginx;
worker_processes 1;
error_log nginx_error.log;
http {
    server {
        listen 80;
        location / {
            root /var/www/html;
        }
    }
}

Configurazione Alternativa per Containers

Un utente non privilegiato e logging su standard output ed error:

worker_processes 1;
user nobody nobody;
error_log /dev/stdout;
pid /tmp/nginx.pid;
events {
  worker_connections 1024;
}
http {
    # Set an array of temp and cache files options 
    # that otherwise defaults to
    # restricted locations accessible only to root.
    client_body_temp_path /tmp/client_body;
    fastcgi_temp_path /tmp/fastcgi_temp;
    proxy_temp_path /tmp/proxy_temp;
    scgi_temp_path /tmp/scgi_temp;
    uwsgi_temp_path /tmp/uwsgi_temp;
    # mime types
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    server {
        listen 8080;
        root /usr/share/nginx/html;
        access_log /dev/stdout;
        error_log /dev/stdout;
    }
}