GNU/Linux >> Tutoriales Linux >  >> Ubuntu

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

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 Ubuntu 14.04 con soporte para PHP5 (a través de PHP-FPM) y soporte para MySQL (LEMP =L inux + nginx (pronunciado "e motor x") + M ySQL + P HP) .

¡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.

Estoy ejecutando todos los pasos de este tutorial con privilegios de root, así que asegúrese de haber iniciado sesión como root:

sudo su

2 Instalación de MySQL 5

Para instalar MySQL, ejecutamos

apt-get install mysql-server mysql-client

Se le pedirá que proporcione una contraseña para el usuario root de MySQL; esta contraseña es válida para el usuario [email protected] así como para [email protected], por lo que no tenemos que especificar una contraseña de root de MySQL manualmente más adelante:

Nueva contraseña para el usuario "root" de MySQL:<-- yourrootsqlpassword
Repetir la contraseña para el usuario "root" de MySQL:<-- yourrootsqlpassword

3 Instalación de Nginx

Nginx está disponible como un paquete para Ubuntu 14.04 que podemos instalar. Como Apache2 está instalado de forma predeterminada, primero lo eliminaremos y luego instalaremos nginx:

servicio apache2 stop
update-rc.d -f apache2 remove
apt-get remove apache2

apt-get install nginx

Inicie nginx después:

inicio del servicio nginx

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 siguiente página:

La raíz del documento nginx predeterminada en Ubuntu 14.04 es /usr/share/nginx/html.

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 funciones adicionales útiles para sitios de cualquier tamaño, especialmente los sitios más concurridos) que instalamos de la siguiente manera:

apt-get install php5-fpm

PHP-FPM es un proceso daemon (con el script de inicio php5-fpm) que ejecuta un servidor FastCGI en el socket /var/run/php5-fpm.sock.

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.nginx.org/NginxFullExample y aquí:http://wiki.nginx.org/NginxFullExample2)

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

Los hosts virtuales se definen en los contenedores del servidor {}. El host virtual predeterminado se define en el archivo /etc/nginx/sites-disponible/default. Modifiquémoslo de la siguiente manera:

vi /etc/nginx/sitios-disponibles/predeterminado

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

Descomente ambas líneas de escucha para que nginx escuche en el puerto 80 IPv4 y IPv6.

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).

He agregado 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. 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).

Ahora guarde el archivo y vuelva a cargar nginx:

servicio de recarga nginx

A continuación, abra /etc/php5/fpm/php.ini...

vi /etc/php5/fpm/php.ini

... y establezca cgi.fix_pathinfo=0:

[...]
server {
        listen 80;
        listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/html;
        index index.php index.html index.htm;

        # Make site accessible from http://localhost/
        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.html;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }

        location /doc/ {
                alias /usr/share/doc/;
                autoindex on;
                allow 127.0.0.1;
                allow ::1;
                deny all;
        }

        # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
        #location /RequestDenied {
        #       proxy_pass http://127.0.0.1:8080;
        #}

        #error_page 404 /404.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;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

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

Recargar PHP-FPM:

recarga del servicio php5-fpm

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

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

[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

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. MySQL no se encuentra en la lista, lo que significa que aún no tenemos compatibilidad con MySQL en PHP5.

6 Obtener compatibilidad con MySQL en PHP5

Para obtener soporte de MySQL en PHP, podemos instalar el paquete php5-mysql. Es una buena idea instalar algunos otros módulos de PHP5, ya que podría necesitarlos para sus aplicaciones. Puede buscar módulos PHP5 disponibles como este:

apt-caché buscar php5

Elige los que necesites e instálalos así:

apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5 -ordenar php5-xmlrpc php5-xsl

APC 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 eAccelerator y Xcache. Se recomienda encarecidamente tener uno de estos instalados para acelerar su página PHP.

APC se puede instalar de la siguiente manera:

apt-get install php-apc

Ahora recarga PHP-FPM:

recarga del servicio php5-fpm

Ahora vuelva a cargar http://192.168.0.100/info.php en su navegador y desplácese hacia abajo hasta la sección de módulos nuevamente. Ahora debería encontrar muchos módulos nuevos allí, incluido el módulo MySQL:

7 Hacer que PHP-FPM use una conexión TCP

De forma predeterminada, PHP-FPM escucha en el socket /var/run/php5-fpm.sock. También es posible hacer que PHP-FPM utilice una conexión TCP. Para ello, abra /etc/php5/fpm/pool.d/www.conf...

vi /etc/php5/fpm/pool.d/www.conf

... y haz que la línea de escucha tenga el siguiente aspecto:

<?php
phpinfo();
?>

Esto hará que PHP-FPM escuche en el puerto 9000 en la IP 127.0.0.1 (localhost). Asegúrese de utilizar un puerto que no esté en uso en su sistema.

Luego recarga PHP-FPM:

recargar php5-fpm

A continuación, revise su configuración de nginx y todos sus vhosts y cambie la línea fastcgi_pass unix:/var/run/php5-fpm.sock; a fastcgi_pass 127.0.0.1:9000;, p. así:

vi /etc/nginx/sitios-disponibles/predeterminado

[...]
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
[...]

Finalmente recargar nginx:

servicio de recarga nginx

8 secuencias de comandos CGI/Perl

Si desea servir scripts CGI/Perl con nginx, lea este tutorial:Sirviendo scripts CGI con Nginx en Debian Squeeze/Ubuntu 11.04

La forma recomendada es usar fcgiwrap (capítulo 4).

9 Enlaces

  • nginx:http://nginx.net/
  • Wiki de nginx:http://wiki.codemongers.com/Main
  • PHP:http://www.php.net/
  • PHP-FPM:http://php-fpm.org/
  • MySQL:http://www.mysql.com/
  • Ubuntu:http://www.ubuntu.com/


Ubuntu
  1. Instalación de Apache2 con compatibilidad con PHP5 y MySQL en Ubuntu 14.04LTS (LAMP)

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

  3. Dockerización de Laravel con Nginx MySQL y Docker Compose en Ubuntu 18.04 LTS

  4. Cómo instalar Nginx con PHP5 y MySQL en Ubuntu 11.10

  5. Instale Prosper202 con Nginx, MySQL y PHP-FPM en Ubuntu

Instalación de Apache2 con compatibilidad con PHP5 y MySQL en Ubuntu 13.04 (LAMP)

Instalación de Nginx con compatibilidad con PHP5 y MySQL en Ubuntu 8.10

Instalación de Nginx con PHP5 (y PHP-FPM) y compatibilidad con MySQL (LEMP) en Debian Wheezy

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

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

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

    [...]
            location ~ \.php$ {
                    try_files $uri =404;
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    
                    # With php5-cgi alone:
                    fastcgi_pass 127.0.0.1:9000;
                    # With php5-fpm:
                    #fastcgi_pass unix:/var/run/php5-fpm.sock;
                    fastcgi_index index.php;
                    include fastcgi_params;
            }
    [...]