<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/install.unix.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'install.unix.nginx.php',
    1 => 'Nginx 1.4.x sur les syst&egrave;mes Unix',
    2 => 'Nginx 1.4.x sur les syst&egrave;mes Unix',
  ),
  'up' => 
  array (
    0 => 'install.unix.php',
    1 => 'Installation sur les syst&egrave;mes Unix',
  ),
  'prev' => 
  array (
    0 => 'install.unix.apache2.php',
    1 => 'Apache 2.x sur les syst&egrave;mes Unix',
  ),
  'next' => 
  array (
    0 => 'install.unix.lighttpd-14.php',
    1 => 'Lighttpd 1.4 sur les syst&egrave;mes Unix',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'install/unix/nginx.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="install.unix.nginx" class="sect1">
 <h2 class="title">Nginx 1.4.x sur les systèmes Unix</h2>

 <p class="para">
  Cette documentation couvre l&#039;installation et la configuration de PHP avec 
  PHP-FPM pour le serveur HTTP Nginx 1.4.x.
 </p>

 <p class="para">
  Ce guide suppose que Nginx a été compilé à partir des sources et donc
  tous les binaires et fichiers de configuration se trouvent dans
  <code class="literal">/usr/local/nginx</code>. Si ce n&#039;est pas le cas et que Nginx a été
  obtenu par d&#039;autres moyens, se référer au
  <a href="https://www.nginx.com/resources/wiki/" class="link external">&raquo;&nbsp;Wiki d&#039;Nginx</a> pour adapter ce manuel
  à la configuration utilisée.
 </p>

 <p class="para">
  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&#039;étudier les documentations d&#039;Nginx et de PHP-FPM afin d&#039;optimiser
  l&#039;installation.
 </p>

 <p class="para">
  Il est à noter que tout au long de cette documentation, les numéros de version
  ont été remplacés par un &quot;x&quot; pour assurer que cette dernière reste correcte
  dans l&#039;avenir. Penser à les remplacer par le numéro de version approprié.
 </p>

 <ol type="1">
  <li class="listitem">
   <p class="para">
    Il est recommandé de consulter la 
    <a href="https://www.nginx.com/resources/wiki/start/topics/tutorials/install/" class="link external">&raquo;&nbsp;documentation de Nginx</a> 
    afin de l&#039;installer sur le système.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Récupérer et décompresser les sources de PHP :
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
tar zxf php-x.x.x
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="para">
    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.
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
cd ../php-x.x.x
./configure --enable-fpm --with-mysqli
make
sudo make install
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="para">
    Récupérer et déplacer les fichiers de configuration dans
    les bons dossiers
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
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
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="para">
    Il est important d&#039;empêcher Nginx de passer les requêtes
    au backend PHP-FPM si le fichier n&#039;existe pas, évitant ainsi
    les failles par injections arbitraires de scripts.
   </p>
   <p class="para">
    Nous pouvons réaliser cela en définissant la directive
    de configuration <a href="ini.core.php#ini.cgi.fix-pathinfo" class="link">cgi.fix_pathinfo</a>
    à la valeur <code class="literal">0</code> dans le php.ini.
   </p>
   <p class="para">
    Modifier php.ini :
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
vim /usr/local/php/php.ini
</pre></div>
    </div>
   </div>

   <p class="para">
    Trouver la directive <code class="literal">cgi.fix_pathinfo=</code>
    et la modifier comme ceci :
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
cgi.fix_pathinfo=0
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="para">
    Le fichier php-fpm.conf doit être modifié pour spécifier que
    php-fpm doit être exécuté avec l&#039;utilisateur
    www-data et le groupe www-data avant de démarrer le service :
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
vim /usr/local/etc/php-fpm.d/www.conf
</pre></div>
    </div>
   </div>

   <p class="para">
    Trouver et modifier ce qui suit :
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user&#039;s group
;       will be used.
user = www-data
group = www-data
</pre></div>
    </div>
   </div>

   <p class="para">
    Le service php-fpm peut maintenant être démarré :
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
/usr/local/bin/php-fpm
</pre></div>
    </div>
   </div>

   <p class="para">
    Ce guide ne va pas configurer php-fpm plus que cela ; pour
    la configuration avancée de php-fpm, consulter
    la documentation.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Nginx doit maintenant être configuré pour supporter l&#039;analyse des
    applications PHP :
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="cdata"><pre>
vim /usr/local/nginx/conf/nginx.conf
</pre></div>
    </div>

   </div>

   <p class="para">
    Modifier le bloc par défaut afin qu&#039;il puisse servir des fichiers
    .php :
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="nginx-confcode"><pre class="nginx-confcode">location / {
    root   html;
    index  index.php index.html index.htm;
}</pre>
</div>
    </div>

   </div>

   <p class="para">
    La prochaine étape permet d&#039;assurer que les fichiers .php soient passés
    au backend PHP-FPM. Sous le bloc PHP commenté par défaut, entrer :
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="nginx-confcode"><pre class="nginx-confcode">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;
}</pre>
</div>
    </div>

   </div>

   <p class="para">
    Redémarrer Nginx.
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="para">
    Créer un fichier de test
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
rm /usr/local/nginx/html/index.html
echo &quot;&lt;?php phpinfo(); ?&gt;&quot; &gt;&gt; /usr/local/nginx/html/index.php
</pre></div>
    </div>
   </div>

   <p class="para">
    Maintenant, naviguer vers http://localhost. Le phpinfo()
    devrait maintenant être affiché.
   </p>
  </li>
 </ol>

 <p class="para">
  En suivant ces différentes étapes, le résultat devrait être un serveur
  web Nginx avec le support de PHP comme module <code class="literal">FPM</code> <code class="literal">SAPI</code>.
  Bien entendu, il y a beaucoup plus d&#039;options de configuration
  disponibles pour Nginx et PHP. Pour plus d&#039;informations, taper
  <strong class="command">./configure --help</strong> dans la source correspondante.
 </p>

</div><?php manual_footer($setup); ?>