Instalación de Software · 7 min read · Jan 26, 2026

Instalando Nginx Con Soporte PHP5 (Y PHP-FPM) Y MySQL En Fedora 19

Nginx (pronunciado “engine x”) es un servidor HTTP de alto rendimiento, gratuito y de código abierto. Nginx es conocido por su estabilidad, rica funcionalidad, configuración sencilla y bajo consumo de recursos. Este tutorial muestra cómo puedes instalar Nginx en un servidor Fedora 19 con soporte para PHP5 (a través de PHP-FPM) y soporte para MySQL.

¡No emito ninguna garantía de que esto funcionará para ti!

1 Nota Preliminar

En este tutorial utilizo el nombre de host server1.example.com con la dirección IP 192.168.0.100. Estas configuraciones pueden diferir para ti, así que debes reemplazarlas donde sea apropiado.

2 Instalando MySQL/MariaDB 5

Primero instalamos MySQL 5 de la siguiente manera:

yum install mysql mysql-server

Luego creamos los enlaces de inicio del sistema para MySQL (para que MySQL se inicie automáticamente cada vez que el sistema arranca) y comenzamos el servidor MySQL:

systemctl enable mysqld.service  
systemctl start mysqld.service

Ahora verifica que la red esté habilitada. Ejecuta

netstat -tap | grep mysql

Debería mostrar algo como esto:

[root@server1 ~]# netstat -tap | grep mysql  
tcp        0      0 *:mysql                     *:*                         LISTEN      1116/mysqld  
[root@server1 ~]#

Si no lo hace, edita /etc/my.cnf y comenta la opción skip-networking:

vi /etc/my.cnf
[...]
#skip-networking
[...]

y reinicia tu servidor MySQL:

systemctl restart mysqld.service

Ejecuta

mysql_secure_installation

para establecer una contraseña para el usuario root (¡de lo contrario, cualquiera puede acceder a tu base de datos MySQL!):

[root@server1 ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: línea 379: find_mysql_client: comando no encontrado

NOTA: ¡SE RECOMIENDA EJECUTAR TODAS LAS PARTES DE ESTE SCRIPT PARA TODOS LOS SERVIDORES MariaDB EN USO EN PRODUCCIÓN! ¡LEA CUIDADOSAMENTE CADA PASO!

Para iniciar sesión en MariaDB y asegurarla, necesitaremos la contraseña actual para el usuario root. Si acabas de instalar MariaDB, y no has establecido la contraseña de root aún, la contraseña estará en blanco, así que solo debes presionar enter aquí.

Introduce la contraseña actual para root (presiona enter para ninguno): <– ENTER
OK, se utilizó la contraseña con éxito, continuando…

Establecer la contraseña de root asegura que nadie pueda iniciar sesión en el usuario root de MariaDB sin la autorización adecuada.

¿Establecer contraseña de root? [Y/n] <– ENTER
Nueva contraseña: <– tucontraseñaderootsql
Reingresa la nueva contraseña: <– tucontraseñaderootsql
¡Contraseña actualizada con éxito!
Recargando tablas de privilegios..
… ¡Éxito!

Por defecto, una instalación de MariaDB tiene un usuario anónimo, permitiendo que cualquiera inicie sesión en MariaDB sin tener que tener una cuenta de usuario creada para ellos. Esto está destinado solo para pruebas, y para hacer que la instalación sea un poco más fluida. Debes eliminarlos antes de pasar a un entorno de producción.

¿Eliminar usuarios anónimos? [Y/n] <– ENTER
… ¡Éxito!

Normalmente, solo se debería permitir que root se conecte desde ‘localhost’. Esto asegura que alguien no pueda adivinar la contraseña de root desde la red.

¿Deshabilitar el inicio de sesión remoto de root? [Y/n] <– ENTER
… ¡Éxito!

Por defecto, MariaDB viene con una base de datos llamada ‘test’ que cualquiera puede acceder. Esto también está destinado solo para pruebas, y debe ser eliminado antes de pasar a un entorno de producción.

¿Eliminar la base de datos de prueba y el acceso a ella? [Y/n] <– ENTER

  • Eliminando la base de datos de prueba…
    … ¡Éxito!
  • Eliminando privilegios sobre la base de datos de prueba…
    … ¡Éxito!

Recargar las tablas de privilegios asegurará que todos los cambios realizados hasta ahora surtan efecto de inmediato.

¿Recargar tablas de privilegios ahora? [Y/n] <– ENTER
… ¡Éxito!

Limpiando…

¡Todo listo! Si has completado todos los pasos anteriores, tu instalación de MariaDB debería estar ahora segura.

¡Gracias por usar MariaDB!
[root@server1 ~]#

3 Instalando Nginx

Nginx está disponible como un paquete para Fedora 19 que podemos instalar de la siguiente manera:

yum install nginx

Luego creamos los enlaces de inicio del sistema para nginx y lo iniciamos:

systemctl enable nginx.service  
systemctl start nginx.service

Escribe la dirección IP o el nombre de host de tu servidor web en un navegador (por ejemplo, http://192.168.0.100), y deberías ver la página de bienvenida de nginx:

4 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). Hay un paquete php-fpm en los repositorios oficiales de Fedora 19, por lo tanto, podemos instalar php-fpm junto con php-cli y algunos módulos de PHP5 como php-mysqlnd que necesitas si deseas usar MySQL desde tus scripts PHP:

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

Zend OPcache es un caché de opcodes de 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 de PHP, como APC y Xcache. Se recomienda encarecidamente tener uno de estos instalados para acelerar tu página PHP. Dado que Zend OPcache ahora está incluido oficialmente en PHP 5.5, lo usamos en lugar de otros cachés de opcodes.

Zend OPcache se puede instalar de la siguiente manera:

yum install php-opcache

Para evitar errores como

[13-Nov-2011 22:13:16] PHP Warning: phpinfo(): No es seguro confiar en la configuración de 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 utilizado 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 zona horaria. Seleccionamos 'Europe/Berlin' para 'CET/1.0/sin 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 abrir /etc/php.ini y establecer date.timezone:

vi /etc/php.ini
[...]
[Date]
; Define la zona horaria predeterminada utilizada por las funciones de fecha
; http://php.net/date.timezone
date.timezone = "Europe/Berlin"
[...]

A continuación, crea los enlaces de inicio del sistema para php-fpm y inícialo:

systemctl enable php-fpm.service  
systemctl start php-fpm.service

PHP-FPM es un proceso daemon que ejecuta un servidor FastCGI en el puerto 9000.

5 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 {}. El vhost predeterminado se define más abajo en el archivo /etc/nginx/nginx.conf - modifiquémoslo de la siguiente manera:

vi /etc/nginx/nginx.conf
[...]
    server {
        listen       80;
        server_name  _;

        #charset koi8-r;

        #access_log  /var/log/nginx/host.access.log  main;

        location / {
            root   /usr/share/nginx/html;
            index  index.php index.html index.htm;
        }

        # redirigir las páginas de error del servidor a la página estática /40x.html
        #
        error_page  404              /404.html;
        location = /40x.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_split_path_info ^(.+\.php)(/.+)$;
             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 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;). 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.

Ten en cuenta que he añadido la línea try_files $uri =404; para prevenir exploits de día cero (ver http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP y http://forum.nginx.org/read.php?2,88845,page=3). Alternativamente, si no deseas usar la línea try_files $uri =404;, puedes establecer cgi.fix_pathinfo = 0; en /etc/php5/fpm/php.ini (no olvides recargar PHP-FPM después).

Ahora guarda el archivo y recarga nginx:

systemctl reload nginx.service

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 ves, PHP5 está funcionando, y está funcionando a través de FPM/FastCGI, como se muestra en la línea Server API. Si desplazas hacia abajo, verás todos los módulos que ya están habilitados en PHP5, incluyendo el módulo MySQL:

6 Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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