Configuration Nginx php5-fpm pour symfony 2

Bonjour,

Voilà, je me suis pris la tête pour configurer correctement Symfony sur ma machine (ubuntu) pour faire tourner Symfony 2.

Je vais vous donner quelques astuces supplémentaires et quelques exemples de configuration.

Tout d’abord, on va commencer par php5-fpm (fastcgi). Symfony consomme de la mémoire, pas énormément en “prod” par contre en version de développement, ça bouffe pas mal surtout si on veut faire du debug. On va donc commencer par augmenter la quantité de mémoire allouée a FPM.

On va rechercher le fichier php.ini utilisé.

mathieu@mathieu:~/workspace/statis$ locate php.ini
/etc/php5/apache2/php.ini
/etc/php5/cli/php.ini
/etc/php5/fpm/php.ini
mathieu@mathieu:~/workspace/statis$

Dans le cas présent, je sais que j’utilise nginx donc pour l’exécution de PHP, j’utilise “fpm”, c’est donc le fichier que je vais modifier.

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 1024M

Ici, j’ai fixé la limite de mémoire a 1024Mb, on pourrait aussi l’écrire 1G. Une fois ceci fait, on redémarre “fpm” :

root@mathieu:~/workspace/statis# service php5-fpm restart
 * Restarting PHP5 FastCGI Process Manager php5-fpm    [ OK ] 
root@mathieu:~/workspace/statis#

Symfony 2 utilise dans certains cas les entêtes Http pour retransmettre des informations de debug, notamment à l’attention de ChromePHP et FirePHP. Par défaut la transmission en environnement de “Dev” est active. Du coup, nginx sature et renvoie des erreurs 502 parce que les entêtes sont trop “gros”.

Je vous mets ici ma conf actuelle de nginx, que je commenterai par la suite :

server {
    listen 9999;
    server_name symfony2;
    root /home/mathieu/workspace/statis/web;
    error_log /var/log/nginx/statis.error.log warn;
    access_log /var/log/nginx/statis.access.log warn;
    rewrite ^/app\.php/?(.*)$ /$1 permanent;
    location / {
        index app.php;
        try_files $uri @rewriteapp;
    }
    location @rewriteapp {
        rewrite ^(.*)$ /app.php/$1 last;
    }
    location ~ ^/(app|app_dev|config)\.php(/|$) {
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO       $path_info;
                fastcgi_read_timeout 600;
                fastcgi_buffer_size   16k;
                fastcgi_buffers       4 16k;  # up to 4k + 128 * 4k
                fastcgi_max_temp_file_size 0;
                fastcgi_index index.php;
                include fastcgi_params;
                gzip off;

    }
}
  • Ligne 1 : on ouvre la configuration du serveur
  • Ligne 2 : on définit le port d’écoute. Ici il s’agit du 9999 mais plus généralement on utilise le port 80 spécifique au protocole http.
  • Ligne 3 : on définit le nom du serveur.
  • Ligne 4 : On définit le répertoire racine de l’application. Attention ici le “Webe est important pour symfony parce qu’il contient le système de boot de symfony.
  • Ligne 5 et 6: On définit les noms des fichiers de log nginx.
  • Ligne 7 : On réécrit l’url pour virer les noms app.php en environnement de production.
  • Ligne 8 à 11: on définit l’index de l’application et on stocke en mémoire.
  • Ligne 12 à 14 : on définit les règles de réécriture avec la variable précédemment enregistrée.
  • Ligne 15 à 26 : Parametres pour l’exécution de Fast-cgi : Je vais revenir dessus plus précisément ci-dessous.

Voilà un exemple de configuration Nginx pour le fonctionnement de Symfony 2, je vais maintenant reprendre la partie FPM pour corriger les problèmes d’entêtes trop importants

location ~ ^/(app|app_dev|config)\.php(/|$) {
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO       $path_info;
                fastcgi_read_timeout 600;
                fastcgi_buffer_size   16k;
                fastcgi_buffers       4 16k;  # up to 4k + 128 * 4k
                fastcgi_max_temp_file_size 0;
                fastcgi_index index.php;
                include fastcgi_params;
                gzip off;

    }

Ce qui nous intéresse ici ce sont les ligne 7 et 8, pour redéfinir les tailles des buffers. On les augmente avec les valeurs ci-dessus.

Ce sont les 2 astuces que j’ai repéré pour les configurations des serveurs pour faire fonctionner Symfony 2 avec nginx et phpfpm.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.