Pour lancer un site à haute performance, une solution peu onéreuse et très efficace existe: combiner le CDN gratuit CloudFlare et le serveur web Nginx (prononcer "engine-x"). On aura ainsi l'amélioration de performances notable de CloudFlare qui prendra toutes les requêtes en front (grosses économies de BP et de requêtes) et Nginx qui servira CloudFlare de façon plus efficace qu'un Apache ou Lighttpd.
On aura donc besoin d'un dédié (dans notre cas Debian, mais rien ne devrait changer pour des plateformes Linux) et d'un compte CloudFlare gratuit.
Sur le dédié, on aura installé: Nginx (bien sûr) mais aussi php5-fpm (pour PHP sur Nginx). En gros:
Je vous laisse le soin de configurer/optimiser le tout, de bons articles existent (gzip, etc).
On va plutôt s'intéresser à adapter notre serveur web au CDN.
Pour cela, on va modifier nginx.conf (souvent dans /etc/nginx/nginx.conf)
On commence par ajouter les lignes suivantes:
# IP CloudFlare
set_real_ip_from 204.93.240.0/24;
set_real_ip_from 204.93.177.0/24;
set_real_ip_from 199.27.128.0/21;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
real_ip_header CF-Connecting-IP;
Cela nous permettra d'avoir les vraies IP dans les logs, et non celles des serveurs de CloudFlare (puisqu'il n'y a plus qu'eux qui se connecteront au serveur). Source pour les IP de CloudFlare.
Pensez à vérifer que votre version de Nginx a été compilée avec http_realip_module, c'est possible avec la commande
Ensuite, pour éviter les erreurs "Website currently unreachable", on va augmenter la taille des buffers proxy pour Nginx. En gros, on va autoriser aux proxys plus de mémoire (et il faut le faire, puisque ce sont les seuls qui contacteront votre serveur désormais)
# Augmenter taille buffers pour CF
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
Enfin, si vous ne l'avez pas fait, pensez à allouer à PHP une mémoire suffisante pour que vos applis tournent proprement:
# Augmenter taille buffers pour PHP
fastcgi_temp_file_write_size 10m;
fastcgi_busy_buffers_size 512k;
fastcgi_buffer_size 512k;
fastcgi_buffers 16 512k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_intercept_errors on;
fastcgi_next_upstream error invalid_header timeout http_500;
Bonus: si vous utilisez Fail2ban, comme je vous le recommande, pensez à laisser passer les IP CloudFlare: dans jail.conf, remplacez la ligne ignoreip comme suit
ignoreip = 127.0.0.1/8 204.93.240.0/24 204.93.177.0/24 199.27.128.0/21 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15