Cet exemple de configuration du serveur Nginx pour l’hébergement d’un site réalisé avec CodeIgniter part du principe qu’un serveur FastCGI sur le port 9000 de la machine. C’est le port par défaut de PHP-FPM un process manager spécialisé qui a récemment été intégré dans PHP 5.3.3. Les fichiers du site se trouvent dans /var/www/exemple.
Sous Debian, le paquet nginx nous propose un répertoire /etc/nginx/sites-available. On va donc y placer notre fichier de configuration, que l’on appelera ici exemple :
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/exemple.access.log;
# Mise en place de la compression transparente
gzip on;
gzip_disable "msie6";
gzip_min_length 1100;
gzip_types text/xml text/css image/x-icon image/bmp application/atom+xml
text/javascript application/x-javascript
application/pdf application/postscript
application/rtf application/vnd.ms-powerpoint
application/msword application/vnd.ms-excel
application/vnd.wap.xhtml+xml;
# On utilise index.php comme index
index index.php;
# Soit le fichier existe, soit le répertoire existe, soit
# on laisse faire CodeIgniter
try_files $uri $uri/ /index.php$uri;
# Le contenu static est servi directement.
# Le navigateur est censé garder ces fichiers 30 jours, ce qui
# fluidifie la navigation.
location ~ ^/(css/|images/|js/|favicon\.ico) {
expires 30d;
root /var/www/exemple;
}
# On confie le traitement d'index.php à PHP FPM
location ~ ^/index\.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(/index\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME /var/www/exemple$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
}
# On empêche l'accès aux fichiers .htaccess fait pour Apache
location ~ /\.ht {
deny all;
}
}
Reste ensuite à faire un lien symbolique et à recharger Nginx :
# ln -ns ../sites-available/exemple /etc/nginx/sites-enabled
# invoke-rc.d nginx reload
À noter : cet exemple laisse comme accès aux clients uniquement les répertoires css, images, et js. Le seul autre point d’accès est le système de route de CodeIgniter. Aucun autre fichier (PHP ou données) n’est accessible, protégeant ainsi d’accès intempestif.