<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'install.unix.nginx.php',
    1 => 'Nginx 1.4.x en sistemas Unix',
    2 => 'Nginx 1.4.x en sistemas Unix',
  ),
  'up' => 
  array (
    0 => 'install.unix.php',
    1 => 'Instalaci&oacute;n en sistemas Unix',
  ),
  'prev' => 
  array (
    0 => 'install.unix.apache2.php',
    1 => 'Apache 2.x en sistemas Unix',
  ),
  'next' => 
  array (
    0 => 'install.unix.lighttpd-14.php',
    1 => 'Lighttpd 1.4 en sistemas Unix',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    '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 en sistemas Unix</h2>

 <p class="para">
  Esta documentación cubre la instalación y configuración de PHP con
  PHP-FPM para el servidor HTTP Nginx 1.4.x.
 </p>

 <p class="para">
  Este guía asume que se ha compilado Nginx a partir de las fuentes y por lo tanto
  todos los binarios y ficheros de configuración se encuentran en
  <code class="literal">/usr/local/nginx</code>. Si no es el caso y se ha obtenido Nginx por otros medios, por favor refiérase al
  <a href="https://www.nginx.com/resources/wiki/" class="link external">&raquo;&nbsp;Wiki de Nginx</a> para adaptar este manual
  a su configuración.
 </p>

 <p class="para">
  Este guía cubre las bases de la configuración del servidor Nginx para
  servir una aplicación PHP en el puerto 80. Se recomienda estudiar las documentaciones de Nginx y PHP-FPM para optimizar su
  instalación.
 </p>

 <p class="para">
  Tenga en cuenta que a lo largo de esta documentación, los números de versión
  han sido reemplazados por una &quot;x&quot; para asegurar que esta última permanezca correcta
  en el futuro. Recuerde reemplazarlos por su número de versión.
 </p>

 <ol type="1">
  <li class="listitem">
   <p class="para">
    Se recomienda consultar la
    <a href="https://www.nginx.com/resources/wiki/start/topics/tutorials/install/" class="link external">&raquo;&nbsp;documentación de Nginx</a>
    para instalarla en su sistema.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Recuperar y descomprimir las fuentes 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">
    Configurar y compilar PHP. Este será el momento en el que se podrá
    personalizar PHP con diversas opciones, como las extensiones
    a activar. Ejecutar ./configure --help para obtener una lista
    de las opciones disponibles. En nuestro ejemplo, se realizará
    una configuración simple con soporte PHP-FPM y 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">
    Recuperar y mover los ficheros de configuración en
    los directorios correctos
   </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">
    Es importante que se impida que Nginx pase las peticiones
    al backend PHP-FPM si el fichero no existe, evitando así
    las vulnerabilidades por inyecciones arbitrarias de scripts.
   </p>
   <p class="para">
    Esto se puede realizar definiendo la directiva
    de configuración <a href="ini.core.php#ini.cgi.fix-pathinfo" class="link">cgi.fix_pathinfo</a>
    al valor <code class="literal">0</code> en su php.ini.
   </p>
   <p class="para">
    Editar 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">
    Encontrar la directiva <code class="literal">cgi.fix_pathinfo=</code>
    y modificarla como sigue:
   </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">
    El fichero php-fpm.conf debe ser modificado para especificar que
    php-fpm debe ser ejecutado con el usuario
    www-data y el grupo www-data antes de iniciar el servicio:
   </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">
    Encontrar y modificar lo siguiente:
   </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">
    El servicio php-fpm puede ahora ser iniciado:
   </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">
    Este guía no va a configurar php-fpm más allá de esto; si está interesado en la configuración avanzada de php-fpm, por favor
    consulte la documentación.
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Nginx debe ahora ser configurado para soportar el análisis de
    las aplicaciones 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">
    Modificar el bloque por defecto para que pueda servir ficheros
    .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 siguiente etapa asegura que los ficheros .php sean pasados
    al backend PHP-FPM; Bajo el bloque comentado por defecto y entre:
   </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">
    Reiniciar 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">
    Crear un fichero de prueba
   </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">
    Ahora, navegue a http://localhost. El phpinfo()
    debería ser mostrado.
   </p>
  </li>
 </ol>

 <p class="para">
  Siguiendo estos diferentes pasos, se debería ejecutar un servidor
  web Nginx con soporte de PHP como módulo <code class="literal">FPM</code> <code class="literal">SAPI</code>.
  Por supuesto, hay muchas más opciones de configuración disponibles para Nginx y PHP. Para más información, escriba
  <strong class="command">./configure --help</strong> en la fuente correspondiente.
 </p>

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