Nginx en reverse proxy

nginx_vodka

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

Related posts

Leave a Comment