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-tidyAPC 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-apcLuego 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 startPHP-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.confLa 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 reloadAhora 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 reloadA 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 reload8 Enlaces
- nginx: http://nginx.org/
- Wiki de nginx: http://wiki.nginx.org/
- PHP: http://www.php.net/
- PHP-FPM: http://php-fpm.org/
- MySQL: http://www.mysql.com/
- Scientific Linux: https://www.scientificlinux.org/
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”.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.