Nginx en reverse proxy
Oui quand je parle de nginx j’aime bien mettre des images de vodka un problème ?
Depuis ma migration de serveur j’ai décidé de changer l’architecture également . La nouvelle architecture aura donc un container par fonction
- Un reverse proxy (nginx)
- Un backend (nginx)
- BDD (MariaDB)
Nous verrons la partie reverse et backend nginx . Pour la section mariadb rien de bien compliqué .
Commençons par le reverse comme d’habitude nous utilisons la commande :
apt-get install nginx
Dans le répertoire de nginx, modifier le fichier proxy_params
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; proxy_hide_header X-Powered-By; proxy_intercept_errors on; proxy_buffering on; proxy_max_temp_file_size 0; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k;
Vous pouvez avoir plus de détails sur le wiki officiel nginx.
La configuration de votre vhost est relativement simple .
server { listen 80; server_name www.domain.com domain.com; # On désactive les access_log pour ne pas faire doublon #access_log off; if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } location / { include proxy_params; proxy_pass http://1.1.1.2:80; } }
Nous venons de mettre en place notre reverse proxy. Je ne vais pas vous dire qu’il vous manque encore une étape pour avoir un résultat .
Passons à notre serveur web nous allons installer à nouveau nginx et les composant php qui sert à desservir nos pages web en php bien-sur
Listes dans composants php à installer
php-apc php-pear php-xml-parser php5-cli php5-common php5-curl php5-fpm php5-gd php5-imagick php5-imap php5-intl php5-mcrypt php5-mysql php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xcache php5-xmlrpc php5-xsl
Comme vous pouvez le voir dans les paquets nous utilisons ici le php-fpm.
Le daemon de php-fpm se trouve /etc/init.d/php5-fpm et la socket /var/run/php5-fpm.sock que nous utiliserons par la suite.
Exemple de vhost
server { listen 80; server_name domain.com www.domain.com; root /var/www/wordpress; index index.php index.htm index.html; access_log /var/log/nginx/domain.com/logs/nginx_access.log main; error_log /var/log/nginx/domain.com/logs/nginx_error.log; client_max_body_size 20m; location ~ \\.php$ { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } include /etc/nginx/conf.d/wordpress; include /etc/nginx/conf.d/security; if (!-e $request_filename) { rewrite ^(.+)$ /index.php?q=$1 last; } if ($host ~* ^domain\\.com$) { rewrite ^(.*) http://www.domain.com$1 permanent; break; } }
En analysant vos logs vous risquez d’avoir l’ip du proxy dans vos logs ce qui n’est pas du tout intéressant. Avec Nginx nous allons modifier notre logs format dans le fichier nginx.conf
log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $request_time';
Dans ma configuration actuelle (proxy) je n’utilise pas le cache nginx mais wordpress le fait déjà très bien.
SOURCES
http://www.howtoforge.com/installing-nginx-with-php5-and-php-fpm-and-mysql-support-lemp-on-debian-wheezy
http://wiki.nginx.org
Cet article Nginx en reverse proxy est apparu en premier sur Guest Blog.