Nginx 1.4.x sur les systèmes Unix

Cette documentation couvre l'installation et la configuration de PHP avec PHP-FPM pour le serveur HTTP Nginx 1.4.x.

Ce guide suppose que Nginx a été compilé à partir des sources et donc tous les binaires et fichiers de configuration se trouvent dans /usr/local/nginx. Si ce n'est pas le cas et que Nginx a été obtenu par d'autres moyens, se référer au » Wiki d'Nginx pour adapter ce manuel à la configuration utilisée.

Ce guide couvre les bases de la configuration du serveur Nginx afin de parvenir à servir une application PHP sur le port 80. Il est recommandé d'étudier les documentations d'Nginx et de PHP-FPM afin d'optimiser l'installation.

Il est à noter que tout au long de cette documentation, les numéros de version ont été remplacés par un "x" pour assurer que cette dernière reste correcte dans l'avenir. Penser à les remplacer par le numéro de version approprié.

  1. Il est recommandé de consulter la » documentation de Nginx afin de l'installer sur le système.

  2. Récupérer et décompresser les sources de PHP :

    tar zxf php-x.x.x
    
  3. Configurer et compiler PHP. Ce sera le moment où il sera possible de personnaliser PHP avec diverses options, comme les extensions à activer. Exécuter ./configure --help pour obtenir une liste des options disponibles. Dans notre exemple, nous effectuerons une configuration simple avec le support PHP-FPM et MySQLi.

    cd ../php-x.x.x
    ./configure --enable-fpm --with-mysqli
    make
    sudo make install
    
  4. Récupérer et déplacer les fichiers de configuration dans les bons dossiers

    cp php.ini-development /usr/local/php/php.ini
    cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
    cp sapi/fpm/php-fpm /usr/local/bin
    
  5. Il est important d'empêcher Nginx de passer les requêtes au backend PHP-FPM si le fichier n'existe pas, évitant ainsi les failles par injections arbitraires de scripts.

    Nous pouvons réaliser cela en définissant la directive de configuration cgi.fix_pathinfo à la valeur 0 dans le php.ini.

    Modifier php.ini :

    vim /usr/local/php/php.ini
    

    Trouver la directive cgi.fix_pathinfo= et la modifier comme ceci :

    cgi.fix_pathinfo=0
    
  6. Le fichier php-fpm.conf doit être modifié pour spécifier que php-fpm doit être exécuté avec l'utilisateur www-data et le groupe www-data avant de démarrer le service :

    vim /usr/local/etc/php-fpm.d/www.conf
    

    Trouver et modifier ce qui suit :

    ; Unix user/group of processes
    ; Note: The user is mandatory. If the group is not set, the default user's group
    ;       will be used.
    user = www-data
    group = www-data
    

    Le service php-fpm peut maintenant être démarré :

    /usr/local/bin/php-fpm
    

    Ce guide ne va pas configurer php-fpm plus que cela ; pour la configuration avancée de php-fpm, consulter la documentation.

  7. Nginx doit maintenant être configuré pour supporter l'analyse des applications PHP :

    vim /usr/local/nginx/conf/nginx.conf
    

    Modifier le bloc par défaut afin qu'il puisse servir des fichiers .php :

    location / {
        root   html;
        index  index.php index.html index.htm;
    }

    La prochaine étape permet d'assurer que les fichiers .php soient passés au backend PHP-FPM. Sous le bloc PHP commenté par défaut, entrer :

    location ~* \.php$ {
        fastcgi_index   index.php;
        fastcgi_pass    127.0.0.1:9000;
        include         fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    }

    Redémarrer Nginx.

    sudo /usr/local/nginx/sbin/nginx -s stop
    sudo /usr/local/nginx/sbin/nginx
    
  8. Créer un fichier de test

    rm /usr/local/nginx/html/index.html
    echo "<?php phpinfo(); ?>" >> /usr/local/nginx/html/index.php
    

    Maintenant, naviguer vers http://localhost. Le phpinfo() devrait maintenant être affiché.

En suivant ces différentes étapes, le résultat devrait être un serveur web Nginx avec le support de PHP comme module FPM SAPI. Bien entendu, il y a beaucoup plus d'options de configuration disponibles pour Nginx et PHP. Pour plus d'informations, taper ./configure --help dans la source correspondante.