Instalación Nginx · 5 min read · Jan 23, 2026

Instalando Nginx Con Soporte PHP5 (Y PHP-FPM) Y MySQL En Scientific Linux 6.3 - Página 2

5 Instalando PHP5

Podemos hacer que PHP5 funcione en nginx a través de PHP-FPM (PHP-FPM (FastCGI Process Manager) es una implementación alternativa de PHP FastCGI con algunas características adicionales útiles para sitios de cualquier tamaño, especialmente sitios más concurridos). Podemos instalar php-fpm junto con php-cli y algunos módulos de PHP5 como php-mysql que necesitas si deseas usar MySQL desde tus scripts PHP de la siguiente manera:

yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

APC es un caché de opcodes PHP gratuito y de código abierto para almacenar en caché y optimizar el código intermedio de PHP. Es similar a otros cachés de opcodes PHP, como eAccelerator y Xcache. Se recomienda encarecidamente tener uno de estos instalados para acelerar tu página PHP.

APC se puede instalar de la siguiente manera:

yum install php-pecl-apc

Luego abre /etc/php.ini y establece cgi.fix_pathinfo=0:

vi /etc/php.ini

| [...] ; cgi.fix_pathinfo proporciona soporte *real* para PATH_INFO/PATH_TRANSLATED para CGI. El comportamiento anterior de PHP era establecer PATH_TRANSLATED en SCRIPT_FILENAME, y no entender qué es PATH_INFO. Para más información sobre PATH_INFO, consulta las especificaciones de cgi. Establecer esto en 1 hará que PHP CGI corrija sus rutas para ajustarse a la especificación. Un valor de cero hace que PHP se comporte como antes. El valor predeterminado es 1. Debes corregir tus scripts para usar SCRIPT_FILENAME en lugar de PATH_TRANSLATED. ; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |

(Consulta http://wiki.nginx.org/Pitfalls para averiguar por qué deberías hacer esto.)

Además de eso, para evitar errores como

[08-Aug-2011 18:07:08] PHP Warning: phpinfo(): No es seguro confiar en la configuración de la zona horaria del sistema. Se *requiere* que uses la configuración date.timezone o la función date_default_timezone_set(). En caso de que hayas usado alguno de esos métodos y aún estés recibiendo esta advertencia, lo más probable es que hayas escrito mal el identificador de la zona horaria. Seleccionamos 'Europe/Berlin' para 'CEST/2.0/DST' en su lugar en /usr/share/nginx/html/info.php en la línea 2

… en /var/log/php-fpm/www-error.log cuando llamas a un script PHP en tu navegador, debes establecer date.timezone en /etc/php.ini:

| [...] [Date] ; Define la zona horaria predeterminada utilizada por las funciones de fecha ; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone date.timezone = "Europe/Berlin" [...] |

Puedes averiguar la zona horaria correcta para tu sistema ejecutando:

cat /etc/sysconfig/clock
[root@server1 nginx]# cat /etc/sysconfig/clock  
ZONE="Europe/Berlin"  
[root@server1 nginx]#

A continuación, crea los enlaces de inicio del sistema para php-fpm y arráncalo:

chkconfig --levels 235 php-fpm on  
/etc/init.d/php-fpm start

PHP-FPM es un proceso daemon (con el script de inicio /etc/init.d/php-fpm) que ejecuta un servidor FastCGI en el puerto 9000.

6 Configurando nginx

La configuración de nginx está en /etc/nginx/nginx.conf que abrimos ahora:

vi /etc/nginx/nginx.conf

La configuración es fácil de entender (puedes aprender más sobre ella aquí: http://wiki.codemongers.com/NginxFullExample y aquí: http://wiki.codemongers.com/NginxFullExample2)

Primero (esto es opcional) puedes aumentar el número de procesos de trabajo y establecer el keepalive_timeout a un valor razonable:

| [...] worker_processes 4; [...] keepalive_timeout 2; [...] |

Los hosts virtuales se definen en contenedores server {} en el directorio /etc/nginx/conf.d. Vamos a modificar el vhost predeterminado (en /etc/nginx/conf.d/default.conf) de la siguiente manera:

vi /etc/nginx/conf.d/default.conf

| [...] server { listen 80; server_name _; #charset koi8-r; #access_log logs/host.access.log main; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } # redirigir las páginas de error del servidor a la página estática /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy de los scripts PHP a Apache escuchando en 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pasar los scripts PHP al servidor FastCGI escuchando en 127.0.0.1:9000 # location ~ \.php$ { root /usr/share/nginx/html; try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # denegar el acceso a los archivos .htaccess, si la raíz del documento de Apache # coincide con la de nginx # location ~ /\.ht { deny all; } } [...] |

servername ; hace de esto un vhost predeterminado que captura todo (por supuesto, también puedes especificar un nombre de host aquí como www.example.com).

En la parte location /, he añadido index.php a la línea de índice. root /usr/share/nginx/html; significa que la raíz del documento es el directorio /usr/share/nginx/html.

La parte importante para PHP es la estrofa location ~ .php$ {}. Descoméntala para habilitarla. Cambia la línea root a la raíz del documento del sitio web (por ejemplo, root /usr/share/nginx/html;). Ten en cuenta que he añadido la línea try_files $uri =404; para prevenir exploits de día cero (consulta http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP y http://forum.nginx.org/read.php?2,88845,page=3). Asegúrate de cambiar la línea fastcgi_param a fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; porque de lo contrario el intérprete de PHP no encontrará el script PHP que llamas en tu navegador ( $document_root se traduce a /usr/share/nginx/html porque eso es lo que hemos establecido como nuestra raíz del documento).

PHP-FPM está escuchando en el puerto 9000 en 127.0.0.1 por defecto, por lo tanto, le decimos a nginx que se conecte a 127.0.0.1:9000 con la línea fastcgi_pass 127.0.0.1:9000;. También es posible hacer que PHP-FPM use un socket Unix - describiré esto en el capítulo 7.

Ahora guarda el archivo y recarga nginx:

/etc/init.d/nginx reload

Ahora crea el siguiente archivo PHP en la raíz del documento /usr/share/nginx/html…

vi /usr/share/nginx/html/info.php

| |

Ahora llamamos a ese archivo en un navegador (por ejemplo, http://192.168.0.100/info.php):

Como puedes ver, PHP5 está funcionando, y está funcionando a través de FPM/FastCGI, como se muestra en la línea del API del servidor. Si desplazas hacia abajo, verás todos los módulos que ya están habilitados en PHP5, incluido el módulo de MySQL:

7 Haciendo que PHP-FPM Use Un Socket Unix

Por defecto, PHP-FPM está escuchando en el puerto 9000 en 127.0.0.1. También es posible hacer que PHP-FPM use un socket Unix que evita la sobrecarga de TCP. Para hacer esto, abre /etc/php-fpm.d/www.conf…

vi /etc/php-fpm.d/www.conf

… y haz que la línea listen se vea como sigue:

| [...] ;listen = 127.0.0.1:9000 listen = /tmp/php5-fpm.sock [...] |

Luego recarga PHP-FPM:

/etc/init.d/php-fpm reload

A continuación, revisa tu configuración de nginx y todos tus vhosts y cambia la línea fastcgi_pass 127.0.0.1:9000; a fastcgi_pass unix:/tmp/php5-fpm.sock;, por ejemplo, así:

vi /etc/nginx/conf.d/default.conf

| [...] location ~ \.php$ { root /usr/share/nginx/html; try_files $uri =404; fastcgi_pass unix:/tmp/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } [...] |

Finalmente recarga nginx:

/etc/init.d/nginx reload

8 Enlaces

Acerca del Autor

Falko Timme es el propietario de Timme Hosting (alojamiento web nginx ultra-rápido). Es el mantenedor principal de HowtoForge (desde 2005) y uno de los desarrolladores principales de ISPConfig (desde 2000). También ha contribuido al libro de O’Reilly “Administración de Sistemas Linux”.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.