Depuis quelque mois, j’expérimente diverse solutions afin de rendre l’hébergement web plus performant tout en restant le plus flexible possible pour les clients. C’est beau laisser tomber Apache et le remplacer par nginx. Il y a moyen d’exécuter des script cgi python ruby ou php mais ces méthodes restent moins intéressante quand on héberge beaucoup de sites différents. La plus part des CMS ont des procédures pour migrera a nginx mais il faut souvent faire beaucoup de config pour simuler les fameux .htaccess.
Quand on lis des résultats sur les ban d’essai, on remarque que nginx est en feu pour servir du contenu statique mais pour ce qui est du contenu généré, il est un peu plus lent que apache. Pour une application maison j’irais avec nginx mais pour faire de l’hébergement web traditionnel j’utilise un mélange des solutions ou un utilise chaque une d’entre elles pour ce qu’elles font le mieux.
Dans cet article j’utilise nginx pour héberger le contenu statique les .png .jpg .css .js et bien d’autres extensions. Pour tout le reste des requêtes, il va les envoyer a son collègue Apache qui traitera la demande. Heureusement les .htaccess sont aussi pris en considération car au bout de la ligne si c’est pas du contenu statique, apache le traite comme si nginx n’était pas la. Ça parait compliqué mais c’est vraiment facile à faire. Il suffit de faire en sorte que apache et nginx écoutent sur un port différent.
Dans la configuration il faut faire:
Listen 0.0.0.0:8081
Ensuite voici un exemple de configuration pour un nginx.
user apache;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
# Hide nginx version
server_tokens off;
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;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 15;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_disable msie6;
gzip_static on;
gzip_comp_level 2;
gzip_proxied any;
gzip_types text/plain
application/x-javascript
text/xml
text/css;
ignore_invalid_headers on;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 4k;
large_client_header_buffers 4 32k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
include /etc/nginx/conf.d/www.example.com.conf;
}Ensuite dans le fichier /etc/nginx/conf.d/www.example.com.conf
server {
error_log /var/log/nginx/www.example.com-error_log warn;
listen 0.0.0.0:80;
server_name example.com www.example.com;
access_log /var/log/nginx/www.example.com.access.log main;
error_log /var/log/nginx/www.example.com.error.log;
root /var/www/html/www.example.com/public_html;
location / {
location ~.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi
|asf|asx|mpg|mpeg|mp4|pls|mp3|mid
|wav|swf|flv|html|htm|txt|js|css
|exe|zip|tar|rar|gz|tgz|bz2|uha
|7z|doc|docx|xls|xlsx|pdf|iso)$ {
expires 7d;
try_files $uri @backend;
}
error_page 405 = @backend;
add_header X-Cache "HIT from Backend";
proxy_pass http://127.0.0.1:8081;
include proxy.inc;
}
location @backend {
internal;
proxy_pass http://127.0.0.1:8081;
include proxy.inc;
}
location ~ .*\.(php|jsp|cgi|pl|py)?$ {
proxy_pass http://127.0.0.1:8081;
include proxy.inc;
}
location ~ /\.ht {
deny all;
}
}Dans le fichier proxy.inc
proxy_connect_timeout 59s; proxy_send_timeout 600; proxy_read_timeout 600; proxy_buffer_size 64k; proxy_buffers 16 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_pass_header Set-Cookie; proxy_redirect off; proxy_hide_header Vary; proxy_set_header Accept-Encoding ''; proxy_ignore_headers Cache-Control Expires; proxy_set_header Referer $http_referer; proxy_set_header Host $host; proxy_set_header Cookie $http_cookie; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Ces exemples proviennent en partie de la configuration généré www.nginxcp.com. Mon setup personnel est très similaire.
Pour certain site que je gère moi-même, j’ai modifié la config pour utiliser une cache memcached qui semble être excellente coté vitesse mais malheureusement je dois repartir memcached régulièrement quand mes modifications ne prennent pas effet assez rapidement bref encore du pain sur la planche ![]()

