Seguimos con la instalación de nuestro servidor LEMP y si en el capítulo anterior instalamos PHP en nuestra Raspberry, ahora le toca el turno a Nginx, el servidor web.
Instalación de Nginx
Continuamos con la E de la pronunciación en inglés ényin-ex. Instalamos:
sudo pacman -S nginxConfiguración de nginx.conf
Empezaremos averiguando cuántos núcleos tiene nuestro procesador para aprovecharlos todos. Ejecutaremos el siguiente comando para determinar el número de ellos:
cat /proc/cpuinfo| grep processor | wc -lEl resultado será el valor a introducir en la directiva worker_processes del fichero nginx.conf.
Renombramos el fichero de configuración:
sudo mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.jfeY lo creamos de nuevo:
sudo nano /etc/nginx/nginx.confuser http http;
worker_processes 4;
events {
worker_connections 1024;
use epoll;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 30;
types_hash_max_size 4096;
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_http_version 1.1;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server_names_hash_bucket_size 128;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 4 2k;
request_pool_size 4k;
client_max_body_size 20M;
output_buffers 1 32k;
postpone_output 1460;
include /etc/nginx/sites-enabled/*;
}Comprobamos la sintaxis con el comando:
sudo nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulActivamos y arrancamos el servicio:
sudo systemctl enable nginx
sudo systemctl start nginxServer Blocks en Nginx
Podemos gestionar varios dominios utilizando los bloques de servidor, comparables a los virtualhosts en Apache.
Añadiremos el usuario al grupo http:
sudo gpasswd -a usuario httpVerificamos:
groups usuariolp wheel http games video audio optical storage scanner power usersCambiamos los permisos del acceso a la ruta del servidor:
sudo chown root:http /srv/http/
sudo chmod g+w /srv/http/Creamos los directorios necesarios para los bloques:
sudo mkdir -p /etc/nginx/sites-{available,enabled}Configuración PHP para server blocks
Para evitar tener que poner el mismo bloque de configuración en todos los hosts que permitamos la ejecución de PHP, vamos a crear un archivo php.conf con la configuración necesaria y lo incluiremos en los hosts:
sudo nano /etc/nginx/php.conflocation ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration)
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
}Crear el primer server block
Ahora sí, creamos el primer bloque:
sudo nano /etc/nginx/sites-available/first_serverserver {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /srv/http/first_server/public_html;
index index.html index.htm;
server_name first_server.rpi4.*;
access_log /var/log/nginx/first_server.access.log;
error_log /var/log/nginx/first_server.error.log;
location / {
index index.html index.htm index.php;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
location = /50x.html {
root /usr/share/nginx/html;
}
# Configuración PHP
include php.conf;
location ~ /\.ht {
deny all;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
}Creamos el enlace simbólico en sites-enabled:
sudo ln -s /etc/nginx/sites-available/first_server /etc/nginx/sites-enabledConfiguración de rutas
Vamos a crear en la ruta que deseemos, las carpetas necesarias:
sudo mkdir -p /srv/http/first_server/public_htmlDamos propiedad a los directorios recién creados:
sudo chown -R http:http /srv/http/first_server/public_htmlY permisos:
sudo chmod g+w /srv/http/Creamos un sencillo fichero HTML para probar que funciona nuestro primer host virtual:
sudo nano /srv/http/first_server/public_html/index.html<!DOCTYPE html>
<html>
<head>
<title>First Server</title>
</head>
<body>
<h1>Hurra! NGINX está funcionando correctamente con jaumeferre.net!</h1>
<p>my first virtualhost</p>
</body>
</html>Múltiples server blocks
Repetiremos el proceso para cada uno de los servidores virtuales que queremos gestionar, teniendo en cuenta que sólo se puede declarar 1 único servidor por defecto y se le indica a nginx en las líneas:
# para IPv4
listen 80 default_server;
# para IPv6
listen [::]:80 default_server ipv6only=on;Para conocer qué servidor por defecto tenemos, basta con ejecutar:
grep -R default_server /etc/nginx/sites-enabled/Configuración del firewall
No nos olvidemos de abrir el puerto HTTP:
sudo ufw allow 80/tcpNi tampoco el correspondiente a HTTPS:
sudo ufw allow 443/tcpReiniciamos el servicio:
sudo systemctl restart nginxConfiguración del cliente
Si vamos a utilizar la Raspberry como servidor web debemos añadir en el fichero /etc/hosts del equipo cliente la línea correspondiente:
sudo nano /etc/hosts#
# /etc/hosts: static lookup table for host names
#
#<ip-address> <hostname.domain.org> <hostname>
127.0.0.1 localhost.localdomain localhost
::1 localhost.localdomain localhost
192.168.1.60 first_server.test
# End of fileProbar la instalación
Ahora, desde nuestro navegador favorito escribimos la dirección:
http://first_server.rpi4.test/Nos debería aparecer:
Hurra! NGINX está funcionando correctamente con first_server.rpi.test!
my first virtualhostDe la misma manera, si hemos creado más de un servidor virtual, cambiando la dirección en el navegador, deberíamos ir cambiando de sitio.
Serie Servidor LEMP:
- PHP
- Nginx ← Estás aquí
- MariaDB (próximamente)
- Configuración final (próximamente)
Ya solo nos quedaría configurar Fail2ban, que podemos seguir desde aquí.
¿Te ha sido útil?
Ayúdame a mejorar con tu puntuación y comentarios.
💬 Comentarios
Los comentarios están gestionados por GitHub Discussions. Necesitas una cuenta de GitHub para participar. ¡Es gratis y rápido!