Nginx está superando rápidamente a Apache como el servidor web favorito. Para las aplicaciones web creadas en lenguajes como Rails y Python, es prácticamente omnipresente, pero es un poco más lento de entender en el mundo de PHP. Parte de la razón de esto es la facilidad con la que PHP y Apache se combinan. Sin embargo, PHP y Nginx pueden cooperar casi con la misma facilidad y, con el lanzamiento de PHP 7, combinar los dos puede ser una opción bastante rápida.
Los Paquetes
Lo primero es lo primero. Actualice Ubuntu y obtenga los paquetes Nginx y PHP.
# sudo apt-get update && sudo apt-get -y upgrade # sudo apt-get -y install nginx php7.0 php7.0-fpm
Cuando finalice la instalación, todos los paquetes deberían estar en su lugar y en funcionamiento. Para asegurarse de que este sea el caso, puede verificar que tanto Nginx como los servicios PHP-FPM se estén ejecutando en Systemd.
# sudo systemctl status nginx # sudo systemctl status php7.0-fpm
Si Systemd confirma que ambos servicios se están ejecutando, el servidor debería estar activo y debería poder ver la página de bienvenida predeterminada de Nginx navegando a localhost
en el navegador.
Configuración
Por supuesto, eso no está ni cerca de estar listo para albergar nada. Se necesita cierta configuración para apuntar a Nginx a algún contenido real y mejorar la seguridad. El directorio raíz de los archivos de configuración de Nginx se encuentra en /etc/nginx
. Afortunadamente, ya existen valores predeterminados de Ubuntu que facilitan mucho el proceso de configuración.
Nginx.conf
El archivo de configuración principal para Nginx es nginx.conf
. Ábralo en el editor de texto de su elección. Requerirá permisos de root, por lo que probablemente sea mejor un editor basado en texto como Vim. La configuración predeterminada es mayormente correcta. Obviamente, hay cosas que se pueden hacer para mejorar la velocidad y la seguridad del sistema, pero la mayor parte está más allá del alcance de este tutorial básico. Si desea mejorar el rendimiento, las opciones de Gzip comentadas ayudarán con la compresión y pueden acelerar las cosas. Por el lado de la seguridad, agregar las siguientes tres líneas ayudará a prevenir actividades maliciosas.
add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block";
Configuración del sitio
Una vez agregadas las líneas, guarde y salga. Hay dos carpetas en la raíz de Nginx, sites-available
y sites-enabled
. sites-available
almacena las configuraciones del sitio. sites-enabled
contiene enlaces simbólicos a los archivos de configuración en sites-available
. De esta manera, habilitar y deshabilitar sitios es tan simple como crear y eliminar enlaces simbólicos.
Usando su editor de texto, cree un archivo en /etc/nginx/sites-available/yoursite
. Este archivo contendrá cualquier configuración específica del sitio para su nuevo sitio web PHP 7. El siguiente ejemplo contiene un desglose en los comentarios de lo que hace cada línea. Es una configuración bastante básica, pero hará el trabajo.
server { #Nginx should listen on port 80 for requests to yoursite.com listen 80; server_name yoursite.com; #Create access and error logs in /var/log/nginx access_log /var/log/nginx/yoursite.access_log main; error_log /var/log/nginx/yoursite.error_log info; #Nginx should look in /var/www/yoursite for your website root /var/www/yoursite/; #The homepage of your website is a file called index.php index index.php; #Specifies that Nginx is looking for .php files location ~ \.php$ { #If a file isn’t found, 404 try_files $uri =404; #Include Nginx’s fastcgi configuration include /etc/nginx/fastcgi.conf; #Look for the FastCGI Process Manager at this location fastcgi_pass unix:/run/php/php7.0-fpm.sock; } }
Cuando haya creado ese archivo, guárdelo y vaya a sites-enabled
directorio. A partir de ahí, cree el enlace simbólico de vuelta al archivo que acaba de crear.
# cd /etc/nginx/sites-enabled # sudo ln -s /etc/nginx/sites-available/yoursite
Seguridad de PHP.ini
La seguridad es un objetivo en movimiento, y es imposible mantenerse a la vanguardia de todas las posibles amenazas, pero siempre es una buena idea bloquear cualquier instalación de servidor nuevo tanto como sea posible. Hay algunos ajustes simples que se pueden hacer en el php.ini
archivo de configuración que ayudará a proteger PHP. Con su editor de texto, abra /etc/php/7.0/fpm/php.ini
. Este es un archivo enorme. Nuevamente, Vim o algo con una función de búsqueda es probablemente lo mejor.
Primero encuentra disable_functions
y agrega phpinfo,system,mail,exec
al final de la cadena de funciones que ya están ahí. Luego busque file_uploads
y establézcalo en Off
. A continuación, busque sql.safe_mode
y enciéndelo On
. Por último, busque allow_url_fopen
y establézcalo en Off
. Antes de cerrar el archivo, agregue una línea más al final.
register_globals = Off
Cuando haya terminado, guarde y cierre. Reinicie el servidor y debería estar listo para funcionar.
# sudo systemctl restart php7.0-fpm # sudo systemctl restart nginx
Adónde ir después
Tal como está, el servidor Ubuntu debería poder ejecutar la mayoría de los sitios web PHP. Cualquier archivo PHP colocado en /var/www/yoursite
será ejecutado por el servidor. Buscará el index.php
archivo primero y el sitio web puede ramificarse desde allí. Por supuesto, se puede hacer mucho más para configurar PHP y Nginx para velocidad, seguridad y casi cualquier situación especial, pero ahora tiene un sólido punto de partida.