Tu servidor web con Nginx
Conociendo NGINX
Nginx es un servidor web de código abierto, también utilizado como proxy inverso, cache de estáticos o balanceador de carga.
A menudo supera a otros servidores web en pruebas de rendimiento (Benchmarks), especialmente con contenido estático llegando a resolver un elevado número de solicitudes concurrentes.
Otros servidores web:
Algunos enlaces de interés:
Para todos los casos prácticos que veremos a continuación, voy a utilizar un servidor de Debian 11.
Puedes descargar aqui la imagen iso de Debian 11.
Instalación
Actualizamos todos los repositorios de nuestro Debian 11
apt update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremoveInstalamos algunas herramientas útiles para nuestro servidor.
apt -y install software-properties-common curl nano zip unzip apt-transport-httpsIntalar Nginx
apt -y install nginxComprobamos que nuestro servidor esta instalado y activado.
service nginx statusVer la versión de Nginx que tenemos
nginx -v
Configuraciones
Para ayudarnos con la configuración de Ningx DigitalOcean tiene una herramienta online
Cosas a tener en cuenta antes de comenzar:
- En el directorio /var/www/html/ estarán los ficheros de nuestro sitio web.
- Se recomienda crear dentro de este directorio una subcarpeta llamada public_html
- Todo el contenido dentro de public_html tiene que tener como usuario y grupo a www-data
Cada sitio web debe tener su propio archivo de configuración.
Nginx tiene dos directorios donde almacena estos archivos:
- /etc/nginx/sites-available/ para los sitios disponibles
- /etc/nginx/sites-enabled/ para los sitios activos
Vamos a crear los directorios y archivos del sitio web:
Creamos un directorio public_html
mkdir -p /var/www/html/public_htmlMovemos el archivo de prueba index.nginx-debian.html al directorio creado
mv index.nginx-debian.html public_htmlDentro de public_html vamos a crear el directorio para los log de nuestro sitio.
mkdir public_html/logsDamos permisos al usuario www-data en ese directorio de manera recursiva
chown -R www-data:www-data public_html
Ahora creamos un archivo de configuración especifico para nuestra web estática.
Entramos en el directorio /etc/nginx/sites-available/
cd /etc/nginx/sites-available/Creamos un nuevo archivo de configuración
nano misitioCopiamos y pegamos
server { listen 80; root /var/www/html/public_html; index.nginx-debian.html; server_name _; # log files access_log /var/www/html/public_html/logs/access.log; error_log /var/www/html/public_html/logs/error.log; location / { try_files $uri $uri/ =404; } #location ~ \.php$ { # include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets): # fastcgi_pass unix:/run/php/php7.4-fpm.sock; # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; #} }``
Activamos el archivo de nuestro sitio
ln -s /etc/nginx/sites-available/misitio /etc/nginx/sites-enabled/Verificamos la configuración
nginx -tReiniciamos nuestro servidor para aplicar los cambios
service nginx restartVisualizamos nuestro sitio web poniendo en el navegador la ip del servidor (obtendremos con el siguiente comando)
ifconfig
Varios sitios en el mismo servidor
Esquema
- Instalación en el servidor
- Stack LEMP (Linux, Nginx, MariaDB, Php).
- WordPress
- Configuración de los sitios
- Sitio-01
- Nginx /etc/nginx/sites-enabled/sitio-01
- WordPress /var/www/html/sitio01
- Sitio-02
- Nginx /etc/nginx/sites-enabled/sitio-02
- WordPress /var/www/html/sitio02
- Sitio-01
Separar en varios usuarios
Supongamos que en nuestro servidor tenemos 2 sitios webs con WordPress usando Php-Fpm, el procesamiento PHP es gestionado por el mismo usuario (www-data) y esto no es recomendable.
Creamos un nuevo usuario
adduser sysadminCreamos un archivo en el directorio /etc/php5/fpm/pool.d/
nano /etc/php5/fpm/pool.d/sysadmin.confAhora copiamos la configuración del pool que usaremos
[sysadmin]
user = sysadmin
group = sysadmin
listen = /var/run/php8.0-fpm-sysadmin.sock
listen.owner = sysadmin
listen.group = sysadmin
pm = ondemand
pm.max_children = 96
chdir = /
- Editamos el archivo de congfiguración de nuestro sitio con el siguiente contenido
nano /etc/nginx/sites-enabled/misitio
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.0-fpm-sysadmin.sock;
}
Comprobamos la configuración de Nginx y reiniciamos ambos servicios.
nginx -tservice nginx restartservice php8.0-fpm restartPodemos ver el resultado con el siguiente comando
ps aux | grep fpm