GNU/Linux >> Tutoriales Linux >  >> Fedora

Instalación de Nginx con soporte PHP5 (y PHP-FPM) y MySQL en Fedora 19

Nginx (pronunciado "motor x") es un servidor HTTP gratuito, de código abierto y de alto rendimiento. Nginx es conocido por su estabilidad, rico conjunto de funciones, configuración simple y bajo consumo de recursos. Este tutorial muestra cómo puede instalar Nginx en un servidor Fedora 19 compatible con PHP5 (a través de PHP-FPM) y MySQL.

¡No emito ninguna garantía de que esto funcione para usted!

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 usted, por lo que debe reemplazarlas cuando corresponda.

2 Instalación de MySQL/MariaDB 5

Primero instalamos MySQL 5 así:

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 se inicia el sistema) e iniciamos el servidor MySQL:

systemctl enable mysqld.service
systemctl start mysqld.service

Ahora verifique que la red esté habilitada. Ejecutar

netstat -tap | grep mysql

Debería mostrar algo como esto:

[[email protected] ~]# netstat -tap | grep mysql
tcp        0      0 *:mysql                     *:*                         LISTEN      1116/mysqld
[[email protected] ~]#

Si no es así, edite /etc/my.cnf y comente la opción skip-networking:

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

y reinicie su servidor MySQL:

systemctl restart mysqld.service

Ejecutar

mysql_secure_installation

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

[[email protected] ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found

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

Para poder iniciar sesión en MariaDB y protegerlo, necesitaremos la contraseña actual
del usuario root. Si acaba de instalar MariaDB y
aún no ha establecido la contraseña raíz, la contraseña estará en blanco,
por lo que solo debe presionar Intro aquí.

Introducir contraseña actual para root (ingresar para ninguna):<-- ENTER
OK, contraseña utilizada con éxito, continuando...

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

¿Establecer contraseña root? [Y/n] <-- ENTRAR
Nueva contraseña: <-- turootsqlpassword
Vuelve a ingresar la nueva contraseña: <-- turootsqlpassword
¡La contraseña se actualizó correctamente!
Recargando tablas de privilegios. .
 ... ¡Éxito!


De forma predeterminada, 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 creado para
ellos. Esto solo está diseñado para realizar pruebas y para que la instalación
sea un poco más sencilla. Debe eliminarlos antes de pasar a un
entorno de producción.

¿Eliminar usuarios anónimos? [Y/n] <-- ENTRAR
 ... ¡Éxito!

Normalmente, la raíz solo debería permitirse conectarse desde 'localhost'. Esto
garantiza que nadie pueda adivinar la contraseña raíz de la red.

¿Deshabilitar el inicio de sesión raíz de forma remota? [S/n] <-- ENTRAR
 ... ¡Éxito!

De forma predeterminada, MariaDB viene con una base de datos llamada 'prueba' a la que cualquiera puede
acceder. Esto también está diseñado solo para pruebas y debe eliminarse
antes de pasar a un entorno de producción.

¿Eliminar la base de datos de prueba y acceder a ella? [S/n] <-- ENTRAR
 - Eliminando la base de datos de prueba...
 ... ¡Éxito!
 - Eliminando privilegios en la base de datos de prueba...
 ... ¡Éxito !

Al volver a cargar las tablas de privilegios, se asegurará de que todos los cambios realizados hasta el momento
se apliquen de inmediato.

¿Recargar las tablas de privilegios ahora? [S/n] <-- ENTRAR
 ... ¡Éxito!

Limpiando ...

¡Todo hecho! Si completó todos los pasos anteriores, su MariaDB
instalación ahora debería ser segura.

¡Gracias por usar MariaDB!
[[email protected] ~]#

3 Instalación de Nginx

Nginx está disponible como 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

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

4 Instalación de 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 ocupados). Hay un paquete php-fpm en los repositorios oficiales de Fedora 19, por lo que podemos instalar php-fpm junto con php-cli y algunos módulos de PHP5 como php-mysqlnd que necesita si quiere usar MySQL desde sus 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 código de operación de PHP gratuito y abierto para almacenar en caché y optimizar el código intermedio de PHP. Es similar a otros cachés de código de operación de PHP, como APC y Xcache. Se recomienda encarecidamente tener uno de estos instalados para acelerar su página PHP. Dado que Zend OPcache ahora se incluye oficialmente en PHP 5.5, lo usamos en lugar de otros cachés de código de operación.

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(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /usr/share/nginx/html/info.php on line 2

... en /var/log/php-fpm/www-error.log cuando llama a un script PHP en su navegador, debe abrir /etc/php.ini y configurar date.timezone:

vi /etc/php.ini
[...]
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Europe/Berlin"
[...]

A continuación, cree los enlaces de inicio del sistema para php-fpm e inícielo:

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 Configuración de 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 (puede obtener más información aquí:http://wiki.codemongers.com/NginxFullExample y aquí:http://wiki.codemongers.com/NginxFullExample2)

Primero (esto es opcional) puede aumentar la cantidad de procesos de trabajo y establecer el tiempo de espera de keepalive_time en un valor razonable:

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

Los hosts virtuales se definen en los contenedores del servidor {}. El host virtual 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;
        }

        # redirect server error pages to the static page /40x.html
        #
        error_page  404              /404.html;
        location = /40x.html {
            root   /usr/share/nginx/html;
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 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;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
            deny  all;
        }
    }
[...]

nombre del servidor _; lo convierte en un vhost catchall predeterminado (por supuesto, también puede especificar un nombre de host aquí como www.example.com).

En la ubicación / parte, agregué index.php a la línea de índice. raíz /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 ubicación ~ \.php$ {} estrofa. Descoméntalo para habilitarlo. Cambie la línea raíz a la raíz del documento del sitio web (por ejemplo, root /usr/share/nginx/html;). Asegúrese 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 llama en su navegador.

Tenga en cuenta que agregué la línea try_files $uri =404; para evitar exploits de día cero (ver http://wiki.nginx.org/Pitfalls#Passing_Unected_Requests_to_PHP y http://forum.nginx.org/read.php?2,88845,page=3). Alternativamente, si no desea utilizar try_files $uri =404; línea, puede configurar cgi.fix_pathinfo =0; en /etc/php5/fpm/php.ini (no olvide volver a cargar PHP-FPM después).

Ahora guarde el archivo y vuelva a cargar nginx:

systemctl reload nginx.service

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

vi /usr/share/nginx/html/info.php
<?php
phpinfo();
?>

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

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

6 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/
  • Fedora:http://fedoraproject.org/

Fedora
  1. Instalación de Nginx con PHP5 (y PHP-FPM) y compatibilidad con MySQL (LEMP) en Ubuntu 14.04 LTS

  2. Instalación de Lighttpd con soporte PHP5 (PHP-FPM) y MySQL en Ubuntu 14.04LTS

  3. Instalación de Apache2 con compatibilidad con PHP5 y MySQL en OpenSUSE 13.1 (LAMP)

  4. Instalación de Apache 2 con compatibilidad con PHP5 y MySQL en Fedora 21 (LAMP)

  5. Cómo instalar Nginx con PHP-FPM y MySQL en Fedora 16 “Verne”

Instalación de Lighttpd con soporte PHP5 (PHP-FPM) y MySQL en Debian Wheezy

Instalación de Lighttpd con PHP5 (PHP-FPM) y MySQL en Debian 8 (Jessie)

Instalación de Apache2 con compatibilidad con PHP5 y MySQL en CentOS 6.2 (LAMP)

Instalación de Apache2 con compatibilidad con PHP5 y MySQL en CentOS 6.3 (LAMP)

Instalación de Nginx con soporte PHP5 (y PHP-FPM) y MySQL en CentOS 6.4

Instalación de Apache2 con compatibilidad con PHP5 y MySQL en Fedora 20 (LAMP)