Prerequisiti

Installare Apache2

Configurazione Apache2

La prima cosa da fare è cambiare la porta di default utilizzata da Apache2, quindi utilizzeremo la porta 8000 invece di 80. Da terminale dare questo comando:
sudo nano /etc/apache2/ports.conf

Cerchiamo la riga:

Listen 80

Cambiamo la porta:

Listen 8000

Salvare e chiudere il file.

Adesso cambiamo la porta nel VirtualHost. Sempre da terminale:
sudo nano /etc/apache2/sites-available/000-default.conf

Cerchiamo:

<VirtualHost *:80>

Cambiamo la porta:

<VirtualHost *:8000>

Salvare e chiudere il file.

Possiamo installare un modulo di Apache2 libapache2-mod-rpaf che ha il compito di cambiare l'indirizzo remoto del client visibile ad altri moduli Apache.
sudo apt-get -y install libapache2-mod-rpaf

Riavviamo Apache2:
sudo service apache2 restart

Installazione e configurazione di Nginx

Per maggiori dettagli leggere la guida su Nginx

Da terminale:
sudo apt install nginx

Attiviamo l'avvio automatico di Nginx:
sudo systemctl enable nginx.service

Riavviamo Nginx:
sudo service nginx restart

Troveremo delle configurazioni di default del proxy nel seguente file:
sudo nano /etc/nginx/proxy_params

Aggiungiamo le seguenti configurazioni standard per il proxy:

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;

Salvare e chiudere il file.

Apriamo il file di configurazione di Nginx:
sudo nano /etc/nginx/sites-available/default

Questa è una configurazione di base che ci permette di utilizzare Nginx come reverse proxy di Apache2:

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;
     }
}

Riavviamo Nginx
sudo service nginx reload

Nginx è più veloce di Apache nel servire i file statici come Js e CSS, quindi configuriamo Nginx in modo tale che serva direttamente i file statici e che invii le richieste di PHP ad Apache:

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;
    }

}

Salvare e chiudere il file.
Verifichiamo la corretta configurazione di Nginx:
sudo nginx -t

Quindi riavviamo Nginx se non abbiamo commesso errori:
sudo service nginx reload