Apache è il web server più diffuso, in grado di operare su un grande numero di sistemi operativi, tra cui UNIX/Linux, Microsoft Windows e OpenVMS.
NGINX è un server web dalle alte prestazioni utilizzato in particolar modo per i file statici e come reverse proxy, ma grazie alla sua versatilità può essere adoperato in qualsiasi tipo di situazione.
In questo tutorial scopriremo come sfruttare i punti di forza di entrambi i web server facendoli cooperare in perfetta armonia. NGINX sarà utilizzato come web server frontend che si occuperà di gestire le richieste dei client e di inviarle ad Apache, che sarà il nostro web server di backend e restituirà la risposta richiesta. Questa procedura permette di ottenere svariati benefici che vanno delle prestazioni alla sicurezza.
Per prima cosa dovrai connetterti al tuo server tramite una connessione SSH. Se non l’hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH. In caso di server locale puoi passare al punto successivo e aprire il terminale del tuo server.
Installazione e Configurazione di Apache
Aggiorna i repository della distribuzione Linux Ubuntu, per essere sicuro di scaricare la versione più aggiornata di Apache:
Successivamente avvia l'installazione:
$ sudo apt install apache2
A questo punto l'installazione di Apache è completata e puoi proseguire con la sua configurazione.
Cambia la porta utilizzata di default da Apache in 8080. Per farlo apri il file di configurazione come indicato:
$ sudo nano /etc/apache2/ports.conf
Cerca la riga Listen 80 e cambiala in Listen 8080, quindi salva e chiudi il file.
Riavvia il servizio di Apache:
$ sudo systemctl restart apache2
Per verificare il cambio di porta di Apache visita l'indirizzo http://<IP.DEL.SERVER>:8080/ o nel caso di server locale http://localhost:8080/. Se la procedura é stata effettuata correttamente verrà visualizzato il tuo sito web.
Installazione e Configurazione di NGINX
Prosegui avviando l'installazione di NGINX:
$ sudo apt-get install nginx
Una volta completata l'installazione, apri il file di configurazione di NGINX come indicato:
$ sudo nano /etc/nginx/nginx.conf
Quindi modifica o aggiungi il blocco server nel seguente modo per utilizzare NGINX come server proxy di Apache:
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm;
server_name IP_DEL_SERVER;
location / {
proxy_pass http://localhost:8090;
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;
}
}
Salva e chiudi il file.
Quindi riavvia il servizio di NGINX:
$ sudo systemctl restart nginx
Configurazione del Firewall
Se sul tuo sistema è presente un firewall allora dovrai impostarlo per abilitare il traffico HTTP e il traffico HTTPS verso la tua macchina.
Qualora utilizzassi il firewall UFW, avrai a disposizione dei profili preinstallati per NGINX. Vediamo quindi come abilitarli.
Per verificare i profili disponibili installati nel firewall UFW esegui questo comando:
Verrà mostrata a schermo una lista simile a questa:
Available applications:
Dovecot IMAP
Dovecot POP3
Dovecot Secure IMAP
Dovecot Secure POP3
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Postfix
Postfix SMTPS
Postfix Submission
Per consentire il traffico HTTP (Porta 80) e HTTPS (Porta 443), dovrai utilizzare il profilo "Nginx Full".
Puoi verificare le informazioni del profilo in questo modo:
$ sudo ufw app info "Nginx Full"
Apparirà la descrizione del profilo a schermo:
Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server
Ports:
80,443/tcp
Dopo aver verificato il profilo sarai pronto ad abilitarlo:
$ sudo ufw allow in "Nginx Full"
Infine procedi con il testare i due web server visitando l'indirizzo http://<IP.DEL.SERVER> o nel caso di server locale http://localhost.
Se la procedura é stata eseguita senza errori verrà mostrato il tuo sito web con la schermata di default di Apache. Questo vuol dire che il reverse proxy funziona ed è stato configurato correttamente.
