Installare e configurare nginx come reverse proxy di apache2

Nginx è un server HTTP open-source ad alte prestazioni capace di operare anche come reverse proxy. Il sito ufficiale e' http://nginx.org/
Venne scritto da Igor Sysoev nel 2002 per far fronte al famoso problema C10K, ovvero di dover gestire decine di migliaia di client contemporaneamente.
L'utilizzo di nginx come reverse-proxy (senza cache) per apache2 e' utile per limitare l'utilizzo di risorse da parte del servizio web. La configurazione "classica" prevede che nginx gestisca i file statici (immagini,css,ecc.) delegando ad apache2 la gestione degli script php, dei file html e quindi dei file .htaccess. Questa soluzione oltre a garantire un minor utilizzo di ram e cpu, consente di gestire piu' velocemente le richieste effettuate dai visitatori del sito.
La guida fa riferimento ad nginx su distribuzione Debian GNU/Linux e quindi ad un server con gia' apache2 installato e configurato. Per installare nginx bastera' digitare questi due comandi da terminale, ovviamente come utente 'root':

apt-get update
apt-get install nginx

Dopodiche' create il file chiamato /etc/nginx/proxy.conf e memorizzare questo al suo interno:

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;

Cancellate la configurazione di default (/etc/nginx/nginx.conf) e rimpiazzatela con questa:

user www-data;
worker_processes 3;

error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
# use epoll;
worker_connections 2048;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

access_log /var/log/nginx/access.log;

sendfile on;
tcp_nopush on;

keepalive_timeout 0;
tcp_nodelay on;

gzip on;

include /etc/nginx/sites-enabled/*;
# include /etc/nginx/conf.d/*.conf;
}

 

N.B. Il valore impostato alla direttiva 'worker_processes' deve essere di 1 unita' per ogni core del vostro processore, quindi se aveste un dual core dovrete settatarla a 2, 4 per un quad core e cosi' via.

Adesso configuriamo su nginx tutti i siti che sono gia' attivi su apache2.
Le configurazioni andranno create nella directory /etc/nginx/sites-enabled/
Nel nostro caso andremo a configurare un solo dominio e creeremo il file chiamato /etc/nginx/sites-enabled/TuoSito.it copiando questa configurazione

 

server {
listen Indirizzo_IP:80;
server_name TuoSito.it www.TuoSito.it;

location / {
proxy_pass http://127.0.0.1:80;
include /etc/nginx/proxy.conf;
}

location ~*
^.+.(jpe?g|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|avi|mp3)$
{
expires 30d;
root /var/www/TuoSito.it/htdocs;
}

}

N.B. Dovrete modificare l'argomento della direttiva "listen" (impostando l'indirizzo ip associato al vostro sito), di "servername" e di "root".

Infine dobbiamo modificare la configurazione di apache2 affinche' non utilizzi piu' la porta 80 di tutti gli ip configurati sul vostro server, ma si metta in ascolto solamente sull'ip locale (127.0.0.1). Per far questo dobbiamo aprire il file /etc/apache2/ports.conf e modificare la direttiva "listen" in questo modo:

Listen 127.0.0.1:80

 

Non ci rimane che riavviare entrambi i server web:

/etc/init.d/apache2 restart
/etc/init.d/nginx start