lundi 18 juin 2012

Nginx reverse proxy avec SSL


Nginx est toujours plus populaire et est utilisé comme : serveur HTTP bien sûr, reverse proxy avec ou sans cache, réécriture d’URL, de protéger et masquer son infrastructure.

Dernièrement, je l'ai utilisé comme reverse proxy afin de regrouper sur un même adresse IP plusieurs sites web (plusieurs serveurs et technos : IIS, Apache, Tomcat) et de préparer une future migration de data center.

Utilisé comme reverse proxy la config est très simple.

Sous Debian télécharger la dernière version.


Ajouter à  /etc/apt/sources.list
deb http://nginx.org/packages/debian/ squeeze nginx 
deb-src http://nginx.org/packages/debian/ squeeze nginx


Puis installer nginx et openssl
apt-get install nginx openssl

Configurer nginx

/etc/nginx/nginx.conf

user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
server_names_hash_bucket_size 64;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
send_timeout 5m;
}

Créer le site 

dans /etc/nginx/sites-available
server {
listen 80;
server_name www.nomdusite.com *.nomdusite.com nomdusite.com;
access_log /var/log/nginx/nomdusite .com.log;
error_log /var/log/nginx/nomdusite .com.error.log notice;
location / {
proxy_pass http://www.nomdusite.com;
}
}

J'ai déclarer dans le /etc/hosts l'adresse privée de nomdusite.com
192.168.0.1 www.nomdusite.com

Utiliser SSL

Pour gérer le reverse proxy avec SSL

Créer  une répertoire contenant le certificat SSL.
mkdir -p /etc/nginx/ssl/nomdusite
cd /etc/nginx/ssl/nomdusite

Générer le certificat SSL à faire signer par une autorité de confiance.
openssl req -new -newkey rsa:2048 -nodes -keyout nomdusite.com.key -out nomdusite.com.csr

Copier le contenu du fichier nomdusite.com.csr au près de votre CA, dans mon cas Godaddy.

Récupérer le certificat nomdusite.com.crt et déclarer le dans la configuration de Nginx avec la clé nomdusite.com.key obtenue lors de la génération du fichier csr.

server {
listen 443;
ssl on;
server_name www.nomdusite.com *.nomdusite.com nomdusite.com;
ssl_certificate /etc/nginx/ssl/nomdusite/nomdusite.com.crt;
ssl_certificate_key /etc/nginx/ssl/nomdusite/nomdusite.key;
access_log /var/log/nginx/nomdusite .com.log;
error_log /var/log/nginx/nomdusite.com.error.log notice;
location / {
proxy_pass https://www.nomdusite.com:443;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Il est parfois nécessaire de chaîner les certificats, je vous renvoi à la documentation de Nginx.


Pour tester la syntaxe de la configuration de nginx :
nginx -t

Pour activer le site, créer un alias dans /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/nomdusite.com /etc/nginx/sites-enabled/nomdusite.com

Puis ensuite pour appliquer la nouvelle configuration :

/etc/init.d/nginx reload

Aucun commentaire:

Enregistrer un commentaire