Dotclear avec Nginx
jeudi 1 juillet 2010 à 23:00 par Dju - 1418 lectures
Après une re-migration de la dedibox v2 à v3 (enfin !), j'ai choisi de me passer d'Apache pour faire tourner ce blog en Dotclear. Ca sera désormais le couple Nginx / PHP qui mènera la danse.
Il y a tout de même quelques petits changements à effectuer au niveau de la configuration.
Une fois bien configuré, on obtient un blog dont le serveur consomme moins de ressources, et répond plus rapidement qu'apache 
On commence d'abord par PHP.
Une fois apache désinstallé (dont le module libapache2-mod-php5), on va installer php en mode CGI. Voire ce billet pour les explications.
Et maintenant, attaquons la configuration de Nginx.
Voici un exemple de host a mettre dans votre fichier /etc/nginx/sites-enabled/votre_site
server {
listen 80;
server_name blog.monsite.com;
access_log /var/log/nginx/blog.monsite.com_access.log;
error_log /var/log/nginx/blog.monsite.com_errors.log;
root /var/www/monsite;
index index.html index.htm index.php;
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|txt|htm|html|xsl|zip)$ {
expires 30d;
}
# php
location ~\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /var/www/monsite$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
# rewrite query
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?$1 last;
}
# redirection pour la page d'erreur
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}
# interdit les htaccess
location ~ /\.ht {
deny all;
}
}
WARNING: afin d'adapter l'utl rewriting d'apache, veuillez noter les 3 lignes en dessous de #rewrite query
C'est grâce à elles que les requetes n'étant pas des fichiers/dossiers/liens pourront être ré-écrits 
/!\ Ceci est valable pour un dotclear en mode QUERY_STRING et non PATH_INFO /!\
Avec Apache, on avait d'habitude un fichier .htaccess comme ceci :
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?$1
une fois tout ça bien enregistré, on vérifie qu'on n'a pas fait de faute de frappe dans le config. de nginx 
nginx -t
puis on démarre le tout
/etc/init.d/php-php-fastcgi start
/etc/init.d/nginx start
Après, pour optimiser un peu, et suivant votre traffic, on pourra jouer sur le nombre de process php lancés.
On edite donc le fichier /etc/default/php-fastcgi et on change la ligne suivante :
PHP_FCGI_CHILDREN=5
Par défaut, il est à 2, on peut le mettre à 5, et aviser par la suite 
Commentaires
Hello! How i may contact the administrator of a site? I have a question.
Salut,
Tu dis que "une fois bien configuré, on obtient un blog dont le serveur consomme moins de ressources, et répond plus rapidement qu'apache". C'est une impression, ou tu as des chiffres pour ça (même approximatifs)?
J'hésite à me lancer.
@pj il est vrai que je n'ai pas publié directement de bench la dessus, mais on en trouve facilement sur le net (ici par exemple : http://www.joeandmotorboat.com/2008... )

Et pour ma part, meme en pleine charge, nginx consomme clairement moins de ram que Apache. Et en faisant un test avec un grand nombre de requêtes, nginx s'en tire mieux. et beaucoup beaucoup mieux quand il s'agit de délivrer du contenu statique