Archivio Domande

Configurazione e ottimizzazione del server web Nginx e Apache

Nginx (pronunciato "engine-x") è un server web leggero e ad alte prestazioni, nonché un server proxy inverso. È stato originariamente creato come soluzione al problema C10K (gestire 10.000 connessioni simultanee) e da allora è diventato uno dei server web più popolari al mondo. Nginx è progettato per servire contenuti statici in modo rapido ed efficiente ed è ampiamente utilizzato come proxy inverso, bilanciatore di carico e cache HTTP.

Apache: Apache HTTP Server, comunemente conosciuto come Apache, è il software per server web più utilizzato al mondo. È stato sviluppato dalla Apache Software Foundation ed è in uso dal 1995. Apache è noto per la sua flessibilità, l'ampia gamma di funzionalità e il forte supporto della comunità. Supporta la generazione di contenuti dinamici tramite moduli come PHP, Python e altri, rendendolo una scelta ideale per molti tipi di applicazioni web.

Installazione di Nginx e Apache

Installazione di Nginx: Su sistemi basati su Ubuntu o Debian, puoi installare Nginx utilizzando i seguenti comandi:

sudo apt update
sudo apt install nginx

Su sistemi basati su CentOS o RHEL:

sudo yum install epel-release
sudo yum install nginx

Dopo l'installazione, puoi avviare e abilitare Nginx con:

sudo systemctl start nginx
sudo systemctl enable nginx

Installazione di Apache: Su sistemi basati su Ubuntu o Debian:

sudo apt update
sudo apt install apache2

Su sistemi basati su CentOS o RHEL:

sudo yum install httpd

Una volta installato, avvia e abilita Apache con:

sudo systemctl start apache2  # Per Ubuntu/Debian
sudo systemctl enable apache2
sudo systemctl start httpd  # Per CentOS/RHEL
sudo systemctl enable httpd

Configurazione di base di Nginx

File di configurazione: Il file di configurazione di Nginx si trova solitamente in /etc/nginx/nginx.conf. Qui vengono effettuate la maggior parte delle impostazioni globali del server. La configurazione è gerarchica e ogni blocco (server, location) ha il proprio contesto specifico.

Host virtuali in Nginx: Nginx non utilizza la direttiva VirtualHost come Apache, ma usa i blocchi server per definire ogni host virtuale. Una configurazione di base per un host virtuale in Nginx potrebbe essere la seguente:

server {
    listen 80;
    server_name example.com;

    root /var/www/example.com/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Questa configurazione ascolta le richieste HTTP sulla porta 80 per il dominio example.com, serve i contenuti da /var/www/example.com/html e definisce il file index da servire come index.html.

Direttive comuni:

  • listen: Specifica l'indirizzo IP e la porta su cui il server deve ascoltare.
  • server_name: Definisce il dominio o l'indirizzo IP a cui il server deve rispondere.
  • root: Definisce la directory principale in cui sono archiviati i contenuti.
  • index: Specifica il file predefinito da servire quando si accede a una directory.

Configurazione di base di Apache

File di configurazione: Il file di configurazione principale di Apache si trova in /etc/httpd/httpd.conf o /etc/apache2/apache2.conf, a seconda della distribuzione. Inoltre, le configurazioni degli host virtuali sono spesso memorizzate in /etc/apache2/sites-available/.

Host virtuali in Apache: Apache utilizza la direttiva VirtualHost per configurare più siti web sullo stesso server. Ecco un esempio:

<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/example.com/html
    ServerName example.com

    <Directory /var/www/example.com/html>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Questa configurazione ascolta sulla porta 80 per le richieste a example.com, serve i file da /var/www/example.com/html e fornisce le configurazioni per i log degli errori e gli accessi.

Direttive comuni:

  • DocumentRoot: Specifica la directory in cui sono localizzati i file del sito web.
  • ServerName: Definisce il nome del dominio o l'indirizzo IP a cui risponde l'host virtuale.
  • ErrorLog: Specifica la posizione del log degli errori.
  • CustomLog: Specifica la posizione del log degli accessi.

Ottimizzazione di Nginx

Regolazione dei processi worker: Nginx è progettato per essere altamente efficiente nel gestire molte connessioni simultanee. Puoi ottimizzarlo configurando il numero di processi worker:

worker_processes auto;
worker_connections 1024;

La direttiva worker_processes determina il numero di processi worker che Nginx utilizza, mentre worker_connections imposta il numero massimo di connessioni simultanee che ogni worker può gestire. Puoi regolare questi valori in base alla CPU e alla memoria del tuo server.

Compressione Gzip: Abilitare la compressione Gzip riduce la dimensione dei contenuti inviati ai client, accelerando i tempi di caricamento delle pagine. In Nginx, puoi farlo aggiungendo quanto segue al blocco http:

gzip on;
gzip_types text/plain text/css application/javascript;
gzip_comp_level 6;

Caching: Nginx fornisce meccanismi di caching che possono ridurre il carico sul server memorizzando i contenuti richiesti frequentemente. Ecco un esempio di configurazione semplice per la cache:

location / {
    proxy_cache my_cache;
    proxy_cache_valid 200 1h;
    proxy_cache_use_stale error timeout updating;
}

Ottimizzazione di Apache

Regolazione del modulo MPM (Multi-Processing Module): Apache utilizza diversi MPM per gestire le richieste in entrata. Per una prestazione ottimale, è importante scegliere il MPM giusto e configurarlo. I due MPM più comunemente usati sono mpm_event e mpm_worker.

Ad esempio, con il modulo mpm_event:

<IfModule mpm_event_module>
    StartServers            2
    MinSpareThreads        25
    MaxSpareThreads       75
    ThreadLimit           64
    ThreadsPerChild       25
    MaxRequestWorkers    150
    MaxConnectionsPerChild   0
</IfModule>

Abilitare la compressione Gzip: Proprio come in Nginx, puoi abilitare la compressione Gzip in Apache aggiungendo quanto segue alla configurazione:

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript application/javascript
</IfModule>

Caching: Apache può memorizzare nella cache i contenuti utilizzando moduli come mod_cache e mod_cache_disk. Ecco un esempio di abilitazione del caching su disco:

<IfModule mod_cache.c>
    CacheRoot /var/cache/apache2/mod_cache
    CacheEnable disk /
</IfModule>

Pratiche di sicurezza per Nginx

  • Limitare la dimensione della richiesta: Impedisce che richieste troppo grandi sovraccarichino il server limitando la dimensione della richiesta.
client_max_body_size 10M;
  • Disabilitare moduli non utilizzati: Disabilita i moduli che non ti servono per ridurre la superficie di attacco.

  • Configurazione SSL: Servi sempre il tuo sito tramite HTTPS. Usa configurazioni SSL robuste e certificati Let's Encrypt.

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:...';

Pratiche di sicurezza per Apache

  • Disabilitare la visualizzazione delle directory: Impedisce agli utenti di visualizzare l'elenco delle directory.
Options -Indexes
  • Disabilitare moduli non utilizzati: Apache viene fornito con molti moduli che potrebbero non essere necessari. Disabilita quelli non utilizzati per ridurre le vulnerabilità.

  • Configurazione SSL: Come per Nginx, assicurati che SSL sia configurato correttamente:

SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key

Confronto tra Nginx e Apache

  • Prestazioni: Nginx tende a funzionare meglio in scenari con contenuti statici pesanti grazie alla sua architettura basata su eventi. Apache, tuttavia, è spesso preferito per contenuti dinamici, specialmente con PHP o altri moduli.

  • Configurazione: Nginx ha una configurazione più concisa e meno complessa, mentre Apache è più flessibile e ha un ecosistema di moduli più ampio.

  • Utilizzo delle risorse: Nginx è generalmente più efficiente in termini di utilizzo della memoria e della CPU, soprattutto sotto carico pesante.

  • Supporto della comunità: Sia Nginx che Apache hanno un forte supporto della comunità, ma Apache ha una storia più lunga.

Nginx e Apache sono entrambi server web potenti e ampiamente utilizzati, ciascuno con i suoi punti di forza e le sue opzioni di configurazione. Configurando e ottimizzando correttamente il tuo server, puoi ottenere prestazioni ottimali e sicurezza. Scegli Nginx se hai bisogno di alte prestazioni con un basso consumo di risorse, soprattutto per contenuti statici e proxy inverso. Scegli Apache se hai bisogno di flessibilità, un ecosistema robusto di moduli e ampio supporto per contenuti dinamici. Una configurazione e ottimizzazione adeguate del server sono essenziali per garantire che i tuoi siti web funzionino in modo efficiente e sicuro. Che tu stia gestendo un piccolo blog o una applicazione aziendale ad alto traffico, Nginx e Apache offrono gli strumenti necessari per soddisfare le tue esigenze di server web.

  • 0 Utenti hanno trovato utile questa risposta
Hai trovato utile questa risposta?