Installare e configurare Nginx come reverse proxy di Apache2 su Ubuntu 20.04 LTS

(Tempo di lettura 4 minuti)

Concludiamo questa serie dedicata ai Proxy: dopo aver visto cos’è un Server Proxy, quali sono i migliori Reverse Proxy oggi disponibili e come utilizzare Nginx come Reverse Proxy, in questo articolo vedremo un caso molto comune e spiegheremo come fare ad installare ed utilizzare Nginx come Reverse Proxy di Apache2 su Ubuntu 20.04 LTS.

Cominciamo intanto dalle fondamenta: se non abbiamo Apache2 sul nostro sistema, dobbiamo provvedere ad installarlo.

Hai bisogno di un sistemista per il tuo server Linux?

Scopri cosa possiamo fare per te.

Installazione di Apache2 su Ubuntu 20.04 LTS

Come di consueto, prima di effettuare un’installazione di un componente software tanto importante, sarà bene verificare che il nostro sistema sia aggiornato; quindi, lanciamo il comando:

sudo apt update

dopo l’eventuale installazione degli aggiornamenti richiesti, passiamo all’installazione del Web Server vero e proprio lanciando i seguenti comandi:

sudo apt install apache2

l’installazione è finita, e come avete visto è molto semplice, ma adesso dobbiamo configurare il nostro Web Server per farlo funzionare a dovere. Dal momento che ci troviamo su una macchina Ubuntu, di default avremo UFW (Uncomplicated Firewall) a proteggere il sistema. Dovremo quindi impostare UFW in modo che consenta il passaggio di traffico da e per Apache2.

Dal momento che lo Stack LAMP è ormai ampiamente collaudato, UTF ha già delle regole di default preimpostate per funzionare al meglio con Apache2, basterà lanciare il seguente comando:

sudo ufw allow in “Apache Full”

a questo punto il demone di Apache2 è già in esecuzione. Verifichiamo tramite il seguente comando:

sudo systemctl status apache2

Per sicurezza però, dal momento che abbiamo apportato delle modifiche di rilievo (sul firewall) sarà bene riavviare il servizio:

sudo service apache2 restart

Bene, la configurazione di default di Apache2 è pronta e abbiamo (quasi!) finito: adesso il nostro Web Server è pronto a rispondere alle nostre richieste.

Tuttavia, dal momento che vogliamo usare Nginx come Reverse Proxy, ovvero vogliamo mettere Nginx “davanti” ad Apache2, dovremo apportare alcune modifiche alla configurazione di default del Web Server.
La presenza del Reverse Proxy Nginx implica che le richieste dall’esterno che arrivano via HTTP/HTTPS sulle usuali porte non arriveranno direttamente ad Apache2, ma dovranno arrivare ad Nginx, il quale a sua volta si occuperà poi di passarle ad Apache2: dobbiamo quindi modificare la consueta porta di ascolto 80 con un’altra, andando ad effettuare questa modifica nel file di configurazione.

Il file di configurazione da modificare si trova nella directory /etc/apache2/ports.conf, usiamo il nostro editor di testi preferito (ad esempio nano)

sudo nano /etc/apache2/ports.conf

e apportiamo la seguente modifica: cerchiamo la riga che contiene il testo

Listen 80

e modifichiamolo con

Listen 8000

A questo punto salviamo le modifiche apportate e chiudiamo il file.

Come sappiamo, Apache2 gestisce molteplici siti web con un solo indirizzo IP pubblico grazie alla tecnica dei VirtualHost: dovremo quindi modificare la porta di ascolto anche nel file di default.
Nell’ipotesi molto probabile che, essendo un sistema tirato su da zero, ci sia al momento un solo sito web, andremo a modificare il file di default, con il seguente comando:

sudo nano /etc/apache2/sites-available/000-default.conf

quello che dobbiamo fare è cercare la riga contenente l’istruzione

<VirtualHost *:80>

e cambiarla con

<VirtualHost *:8000>

In pratica stiamo dicendo ad Apache2 di mettersi in ascolto sulla porta 8000.

Nell’ipotesi di voler ospitare un sito web disponibile all’indirizzo “ilmiosito.com”, il nostro VirtualHost sarà simile a quello che segue:

<VirtualHost *:8000>
    
ServerAdmin admin@ilmiosito.com      
    ServerName ilmiosito.com
    ServerAlias www. ilmiosito.com
    
    DocumentRoot /var/www/ilmiosito.com/html
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Ultimata la modifica come di consueto salviamo il file, chiudiamo e riavviamo il servizio con il comando visto prima, che riportiamo di seguito per comodità:

sudo service apache2 restart

Hai un problema sul tuo server Linux?

Scopri cosa possiamo fare per te.

Installazione Nginx su Ubuntu 20.04 LTS

Ultimata l’installazione di Apache2, che fungerà da Web Server, passiamo all’installazione di Nginx, che useremo come Reverse Proxy. Anche in questo caso la fase di installazione è decisamente molto semplice, e si porta a termine con il seguente comando:

sudo apt install nginx

poco dopo avremo un output simile al seguente:

nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-05-10 12:34:21 CET;

Adesso dobbiamo attivare Nginx affinché si avvii in maniera automatica all’avvio del sistema:

sudo systemctl enable nginx.service

Riavviamo il servizio:

sudo service nginx restart

e andiamo a modificare il file di configurazione di Nginx come proxy con il seguente comando:

sudo nano /etc/nginx/proxy_params

aggiungiamo le seguenti istruzioni in coda al file:

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

client_max_body_size 100M;
client_body_buffer_size 1m;
proxy_intercept_errors on;
proxy_buffering on;
proxy_buffer_size 128k;
proxy_buffers 256 16k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 0;
proxy_read_timeout 300;

salviamo il file e chiudiamo.

Per quanto riguarda i dettagli circa i valori e le istruzioni riportate sopra, si rimanda alla documentazione ufficiale di Nginx.

Adesso dobbiamo andare a modificare il file di configurazione principale di Nginx

sudo nano /etc/nginx/sites-available/default

e inseriamo le seguenti direttive:

server {
     listen 80 default_server;
     listen [::]:80 default_server;

     root /var/www/html;

     index index.php index.html index.htm index.nginx-debian.html;

     server_name _;

     location / {
       proxy_pass http://localhost:8000;
       include /etc/nginx/proxy_params;
     }
}

Notiamo che adesso sarà Nginx ad intercettare tutte le richieste HTTP in ingresso sulla porta 80 e quindi provvederà ad inoltrarle ad Apache2 sulla porta 8000 tramite l’indirizzo locale http://localhost:8000;

Riavviamo Nginx:

sudo service nginx reload

Il vantaggio di sfruttare Nginx come Reverse Proxy per Apache2 sta nelle maggiori performance di Nginx, specie nel servire i file statici come JS, CSS e immagini. Una configurazione molto utilizzata (alternativa a quella indicata sopra) è la seguente:

server {
    listen 80;
    server_name default_server;
    root /var/www/html;
    index index.php index.htm index.html;

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        proxy_pass http://localhost:8000;
        include /etc/nginx/proxy_params;
    }

    location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ {
                expires      30d;
    }

}

Vediamo adesso di scoprire il significato di queste istruzioni:

listen 80; Nginx resta in ascolto sulla porta 80, essendo utilizzato come Reverse Proxy.

root /var/www/html; questa è la directory dove dobbiamo posizionare i file del nostro sito.

index index.php index.htm index.html; questi sono i file che, nella root directory, verranno aperti di default quando eseguiamo una richiesta del tipo http://localhost oppure http://ilmiosito.com

    location ~ \.php$ {
        proxy_pass http://localhost:8000;
        include /etc/nginx/proxy_params;
    }

Tutti i file con estensione .php vengono passati al Web Server Apache2, che è in ascolto sulla porta 8000.

    location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ {
                expires      30d;
    }

Tutti i file statici aventi le estensioni indicate tra parentesi verranno serviti direttamente da Nginx, senza quindi passare da Apache2 (con notevole incremento di prestazioni).

Salviamo il file modificato come sopra e verifichiamo che la configurazione sia corretta riavviando il servizio con il seguente comando:

sudo service nginx restart

se tutto è andato per il meglio, adesso Nginx funziona da Reverse Proxy per Apache2.

Hai bisogno di assistenza tecnica sul tuo server Linux?

Scopri cosa possiamo fare per te.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Torna su