NGINX en Ubuntu 20.04
Bienvenido a este tutorial, donde aprenderás a instalar y configurar NGINX en Ubuntu 20.04
¿Empezamos?
# Contenidos del tutorial
1. Instalar NGINX en Ubuntu 20.04
Para instalar NGINX en Ubuntu 20.04 necesitamos abrir la terminal y ejecutar los siguientes comandos:
Entrar en modo Root
sudo su
Actualizar el directorio de paquetes de Ubuntu.
apt-get update
Instalamos NGINX con el siguiente comando:
apt install nginx
Comprobamos que funcione bien…
systemctl status nginx
Al ejecutar el comando anterior, te debe de aparecer un mensaje como este:
Si nos aparece “active (running)”, significa que el servidor está funcionando bien.
Por otra parte, si entramos en el navegador con la url de “localhost”, podemos ver nuestra la página de por defecto de NGINX.
Perfecto, ya tenemos instalado NGINX en Ubuntu 20.04. En la próxima sección te enseñaré la configuración por defecto de NGINX.
TUTORIAL RECOMENDADO PARA Ubuntu
Explicación y configuración del Módulo mod_status – Saber rendimiento del servidor Apache Ubuntu Server 20.04
2. Configuración por defecto de NGINX
Toda la configuración de NGINX la haremos a través de la terminal (cmd).
Ver sitios disponibles:
ls /etc/nginx/sites-available
Aquí nos aparece una lista de los sitios que tenemos actualmente disponibles. Siempre por defecto tenemos el default.
Ver sitios activos:
ls /etc/nginx/sites-enabled
Aquí nos aparece una lista de los sitios que tenemos actualmente activos (que son públicos en nuestro servidor). Siempre por defecto tenemos el default. Más adelante en esta guía, aprenderemos a activar y desactivar los sitios de nuestro servidor.
Carpeta pública del sitio default:
Cada sitio que creemos, deberá de tener un directorio (que será publico). Dentro de ese directorio, se añadirán todos los archivos que queremos que se vean en nuestra web.
Por defecto la carpeta pública del sitio default (sitio que se crea por defecto al instalar NGINX) se encuentra en:
Archivo de configuración de un sitio:
En este caso, vamos a ver el archivo de configuración del sitio default. Para ello debemos de ejecutar el siguiente comando para abrirlo:
nano /etc/nginx/sites-enabled/default
Lo que realmente, el archivo de configuración de cada sitio web, se encuentra dentro de su propio directorio.
Sigue leyendo y descubre cómo funciona este archivo por dentro.
TUTORIAL RECOMENDADO PARA Ubuntu
Explicación y configuración del Módulo mod_info – Mostrar configuración del servidor Apache Ubuntu Server 20.04
3. Crear un nuevo sitio en NGINX
En esta sección, vamos a aprender a crear más de un sitio en un mismo servidor. Esto lo conseguiremos gracias a los servidores virtuales (virtual hosts) que nos proporciona NGINX.
Ejecutamos el siguiente comando para crear el directorio para el sitio:
mkdir -p /var/www/example
Le damos los permisos de usuario al directorio que acabamos de crear:
chown -R nombreusuario:nombreusuario /var/www/example
En donde pone “nombreusuario” debes de colocar el nombre de tu usuario de Ubuntu. En mi caso el comando sería:
chown -R mab55:mab55 /var/www/example
Le damos los siguientes permisos al directorio:
chmod -R 755 /var/www/example
Creamos un archivo html de ejemplo dentro del directorio:
echo "Texto para example.com" > /var/www/example/index.html
4. Configurar un sitio en NGINX
Una vez creado el directorio y los ficheros para el sitio, vamos a configurar el sitio. Para ahorrar tiempo, vamos a copiar la configuración del sitio por defecto (default) y la adaptaremos.
Nos movemos a la carpeta de los sitios disponibles:
cd /etc/nginx/sites-available
Copiamos el sitio por defecto y le colocamos el nombre de nuestro sitio
cp default example
Editamos con Nano, el fichero que acabamos de copiar.
nano example
Dejamos el fichero de la siguiente forma:
# Default server configuration
#
server {
listen 80;
listen [::]:80;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/example;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name example.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
# listen 80;
# listen [::]:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}
Aquí debemos de:
- Quitar el default-server de las líneas 4 y 5.
- Añadir la ruta de la carpeta del sitio (en mi caso /var/www/example) que se encuentra en la línea 23.
- Añadir en server_name, el nombre de nuestro dominio (en mi caso example.com) que se encuentra en la línea 28.
Guardamos los cambios y listo 😉
5. Estados de los sitios en NGINX
Cómo hemos visto anteriormente, en la carpeta de “sites-available” tenemos todos los sitios disponibles. Esos sitios no están públicos. Para saber los sitios que tenemos públicos debemos de ir a la carpeta “sites-enabled”:
cd /etc/nginx/sites-enabled
Por defecto, solo tendrás activado el sitio por defecto (default). Pero claro, lo que necesitas es que se active el sitio “example”, que es el sitio que hemos creado y configurado en los pasos anteriores… Para ello debemos de crear un enlace simbólico con el siguiente comando:
ln -s /etc/nginx/sites-available/example .
Ahora lo que haremos es eliminar el sitio por defecto con el siguiente comando:
rm default
Antes de reiniciar el servidor, debemos de comprobar que la sintaxis esté bien escrita. Para ello ejecutaremos el siguiente comando:
nginx -t
Una vez comprobado que todo esté bien, vamos a reiniciar el servidor para aplicar los cambios:
nginx -s reload
6. Configurar dominio
Antes de tener nuestro sitio listo, podemos mostrar el sitio a través de un dominio (de forma local), para ello debemos de entrar en el fichero de “hosts”:
nano /etc/hosts
Dentro de este archivo, añadiremos el dominio (en mi caso example.com) en la línea 2 del documento:
127.0.0.1 localhost
127.0.1.1 mab55-VirtualBox example.com
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Para aplicar los cambios reiniciamos el servidor:
nginx -s reload
7. Comprobar sitio
Ha llegado la hora de probar el sitio que acabamos de crear.
Para probar nuestro sitio, debemos de abrir el navegador y entrar en el dominio que hemos configurado anteriormente.
Si todo va como tiene que ir, nos debe de aparecer nuestro archivo html que hemos creado anteriormente.
8. Crear nuestro propio certificado SSL
Una vez nuestro sitio funciona, vamos a darle un poco más de seguridad añadiéndole un certificado SSL (no seguro porque lo generamos nosotros).
Empezaremos creando nuestro propio certificado SSL, siguiendo los siguientes pasos:
Generar el fichero .key:
openssl genrsa -out server.key 1024
Generamos el fichero server.csr a partir del fichero .key:
openssl req -new -key server.key -out server.csr
Rellenamos nuestra información personal…
Comprobamos que se hayan creado correctamente ambos ficheros (el fichero .csr y .key):
ls -l
Enlazamos los 2 ficheros para generar el certificado SSL:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Creamos el siguiente directorio para añadir los certificados dentro:
mkdir /etc/nginx/ssl
Creamos el siguiente directorio para añadir los certificados dentro:
chmod 700 /etc/nginx/ssl
Copiamos los dos ficheros a /etc/nginx/ssl/.
cp server.crt /etc/nginx/ssl/
cp server.key /etc/nginx/ssl/
Reiniciamos el servidor para aplicar los cambios:
nginx -s reload
TUTORIAL RECOMENDADO PARA Ubuntu
Cambiar archivo por defecto de Apache Ubuntu Server 20.04
9. Configurar certificado SSL
Con los certificados que hemos creado en el paso anterior, ahora los vamos a configurar con nuestro sitio.
Entramos dentro del fichero del sitio
nano /etc/nginx/sites-aviable/example
Dejamos el archivo de la siguiente forma:
# Default server configuration
#
server {
listen 80;
listen [::]:80;
server_name www.example.com
return 301 https://$server_name$request_url;
}
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.key;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/example;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name example.com;
Reiniciamos el servidor y listo.
nginx -s reload
TUTORIAL RECOMENDADO PARA Ubuntu
Instalar servidor SSH en Ubuntu 21.04
Hasta aquí este tutorial de NGINX. Para cualquier duda puedes escribirme en el formulario de contacto pulsando aquí.
Un saludo Mab55
Marçal Alarcón Brugal
Soy Técnico en Desarrollo de Aplicaciones Web con más de 5 años de experiencia en el sector informático. En los últimos años, me he centrado en enseñar mis conocimientos de informática a través de cursos, tutoriales…