Come personalizzare l'header del server Nginx?

Pubblicato 13 ottobre 2024

Problema: Personalizzare gli header del server Nginx

Gli header del server Nginx contengono informazioni sul software del server, che possono esporre vulnerabilità di sicurezza. Personalizzare questi header può migliorare la sicurezza e nascondere informazioni sensibili a potenziali attaccanti.

Metodi per personalizzare gli header del server Nginx

Modificare la configurazione di Nginx

Per personalizzare gli header del server Nginx, puoi modificare il file di configurazione di Nginx. Questo comporta la modifica del file nginx.conf, solitamente situato nella directory /etc/nginx/. Un modo comune per regolare gli header del server è utilizzare la direttiva server_tokens.

Per modificare il file nginx.conf, usa un editor di testo con privilegi di root:

sudo nano /etc/nginx/nginx.conf

Nel file, puoi aggiungere o modificare la direttiva server_tokens. Per disabilitare il numero di versione nell'header del server, aggiungi questa riga all'interno del blocco http {}:

server_tokens off;

Dopo aver apportato le modifiche, salva il file e riavvia Nginx per applicare la nuova configurazione:

sudo systemctl restart nginx

Suggerimento: Verifica le modifiche agli header del server

Dopo aver apportato modifiche alla configurazione di Nginx, puoi verificare le modifiche agli header del server utilizzando curl. Esegui il seguente comando:

curl -I http://tuo-dominio.com

Questo mostrerà gli header HTTP restituiti dal tuo server, permettendoti di confermare che le modifiche sono state applicate correttamente.

Utilizzare il modulo Headers More

Un altro metodo per personalizzare gli header del server Nginx è l'utilizzo del modulo Headers More. Questo modulo offre un maggiore controllo sugli header delle risposte HTTP.

Per utilizzare il modulo Headers More:

  1. Installa il modulo. Su sistemi Ubuntu o Debian, usa:
sudo apt-get install nginx-extras
  1. Dopo l'installazione, configura gli header personalizzati nel tuo file di configurazione Nginx. Per rimuovere completamente l'header del server, aggiungi questa riga all'interno del blocco server {}:
more_clear_headers Server;

Per impostare un header del server personalizzato, usa:

more_set_headers "Server: Il Mio Server Personalizzato";

Ricorda di riavviare Nginx dopo aver apportato queste modifiche per applicare la nuova configurazione.

Guida passo-passo per personalizzare gli header del server Nginx

Disabilitare completamente l'header del server

Per rimuovere l'header del server in Nginx:

  1. Apri il file di configurazione Nginx:

    sudo nano /etc/nginx/nginx.conf
  2. Aggiungi queste righe all'interno del blocco http {}:

    server_tokens off;
    more_clear_headers Server;
  3. Salva il file ed esci dall'editor di testo.

  4. Testa la configurazione per errori di sintassi:

    sudo nginx -t
  5. Se non vengono trovati errori, riavvia Nginx:

    sudo systemctl restart nginx

Per verificare le modifiche:

  1. Usa curl per controllare gli header:

    curl -I http://tuo-dominio.com
  2. Cerca l'header Server nell'output. Dovrebbe essere assente.

Suggerimento: Verifica con gli strumenti di sviluppo del browser

Puoi anche utilizzare gli strumenti di sviluppo del tuo browser per controllare gli header del server. Apri gli strumenti di sviluppo (solitamente F12), vai alla scheda Network, ricarica la pagina e ispeziona gli header della richiesta della pagina principale.

Modificare il contenuto dell'header del server

Per modificare le informazioni dell'header del server:

  1. Apri il file di configurazione Nginx:

    sudo nano /etc/nginx/nginx.conf
  2. Aggiungi questa riga all'interno del blocco http {}:

    more_set_headers "Server: Il Nome Del Tuo Server Personalizzato";
  3. Salva il file ed esci dall'editor di testo.

  4. Testa la configurazione:

    sudo nginx -t
  5. Se non vengono trovati errori, riavvia Nginx:

    sudo systemctl restart nginx

Per testare il nuovo header del server:

  1. Usa curl per controllare gli header:

    curl -I http://tuo-dominio.com
  2. Cerca l'header Server nell'output. Dovrebbe mostrare il nome del tuo server personalizzato.

Approcci alternativi

Utilizzo della direttiva proxy_pass_header

La direttiva proxy_pass_header Server in Nginx ti permette di passare l'header Server da un server backend senza che Nginx lo modifichi. Questo metodo è utile quando usi Nginx come proxy inverso e vuoi mantenere l'header del server originale dalla tua applicazione backend.

Per utilizzare questo metodo:

  1. Apri il file di configurazione Nginx:

    sudo nano /etc/nginx/nginx.conf
  2. Aggiungi questa riga all'interno del blocco server {}:

    proxy_pass_header Server;
  3. Salva il file e riavvia Nginx:

    sudo systemctl restart nginx

Questo approccio è valido quando vuoi mantenere le informazioni dell'header del server dal tuo server backend invariate, piuttosto che modificarle o rimuoverle completamente.

Suggerimento: Risoluzione dei problemi con proxy_pass_header

Se la direttiva proxy_pass_header non sembra funzionare, controlla se hai altre direttive che potrebbero sovrascriverla, come proxy_hide_header o proxy_set_header. Queste direttive possono interferire con proxy_pass_header se non configurate correttamente.

Utilizzo di script lato server

Puoi anche utilizzare linguaggi di scripting lato server come PHP, Python o altri per modificare gli header HTTP. Questo metodo ti offre più opzioni nella gestione dinamica degli header.

Per esempio, in PHP:

<?php
header("Server: Server PHP Personalizzato");
?>

In Python (utilizzando Flask):

from flask import Flask, make_response

app = Flask(__name__)

@app.after_request
def add_header(response):
    response.headers['Server'] = 'Server Python Personalizzato'
    return response

Vantaggi di questo approccio:

  • Permette modifiche dinamiche degli header basate su condizioni specifiche
  • Può essere integrato con la logica dell'applicazione esistente

Svantaggi di questo approccio:

  • Aggiunge overhead di elaborazione
  • Potrebbe non funzionare se gli header sono già stati inviati
  • Richiede modifiche al codice dell'applicazione anziché alle impostazioni del server