Configuraciones básicas del servidor web NGINX

En el artículo anterior mostré cómo configurar el servidor web Apache para diferentes propósitos, en esta ocasión haré lo mismo con NGINX

Configuración de host virtual

En caso de haber configurado NGINX con Let’s encrypt utilizando mi tutorial para montar un servidor LEMP tendremos un archivo de configuración en “/etc/nginx/sites-enabled” con un contenido similar al siguiente

server {
    server_name frank.asgardius.company;
    root /var/www/html;

    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
     }
    
    location ~ /\.ht {
        deny all;
    }
       
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/frank.asgardius.company/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/frank.asgardius.company/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
}
server {
    if ($host = frank.asgardius.company) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
    
    
    listen 80;
    server_name frank.asgardius.company;
    return 404; # managed by Certbot
    
        
}

El parámetro servername indica el nombre de host de nuestro sitio web. El parámetro root indica el directorio raíz de nuestro sitio web. El parámetro index indica dónde buscar la paǵina web predeterminada en cada directorio. En este caso cuando un cliente socicite el sitio web “frank.asgardius.company” el servidor intentará servir el archivo “/var/www/html/index.html”, si no lo encuentra intentará con “/var/www/html/index.htm” y despues con “/var/www/html/index.php”. El bloque “localtion /” indica que si un cliente solicita un archivo que no existe devuelva un mensaje de error 404. El bloque “location ~ .php$” indica los parámetros necesarios para poder procesar los sitios web programados en PHP. El bloque “location ~ /.ht” impide el acceso a los archivos .htacces en caso de existir por motivos de seguridad. La línea “listen 443 ssl” indica que el sitio web estará disponible desde el puerto 443 con encriptado SSL. El parámetro “ssl_certificate” indica la ruta del certificado de seguridad de nuestro sitio web. El parámetro “ssl_certificate_key” indica la ruta del archivo llave requerido para hacer funcionar el certificado. La línea Include indica la ruta de un archivo de configuración con parámetros adicionales. El parámetro ssl_dhparam indica la ruta a otro archivo necesario para hacer funcionar el certificado de seguridad en NGINX. Lo último del archivo de configuración es para redirigir las peticiones HTTP a la versión HTTPS del sitio web y mostrar un error 404 en caso de que la redirección falle. En algunos casos al intentar configurar esta parte puede aparecer el siguiente error

could not build server_names_hash

Esto suele ocurrir al configurar un nombre de host largo en sistemas de 32 bits, lo cual se puede solucionar introduciendo la siguiente línea dentro del bloque “http” del archivo de configuración principal de NGINX

server_names_hash_bucket_size  64;

Este archivo suele encontrarse en la siguiente ruta según la documentación oficial

/etc/nginx/nginx.conf

Proxy inverso

La función de proxy inverso permite redirigir el tráfico de un servidor web a través de otro (Cloudflare se basa en ese principio)

Para redirigir el tráfico de una instancia de Icecast instalado en nuestro servidor web podemos agregar lo siguiente

    location / {
        proxy_pass http://127.0.0.1:8000;
    }

Podemos redirigir el tráfico de un directorio específico en su lugar

    location /r3 {
        proxy_pass http://127.0.0.1:8000/r3;
    }

En caso de que el sitio a redirigir utilice tráfico websocket agregamos el parámetro “proxy_http_version 1.1” de la siguiente forma

    location /socket {
        proxy_pass http://127.0.0.1:8096;
        proxy_http_version 1.1;
    }

En caso de que el sitio a redirigir utilice SSL debemos agregar el parámetro “proxy_set_header Host $http_host” de la siguiente forma

    location / {
        proxy_pass https://example.com;
        proxy_set_header Host $http_host;
    }

Dejar un comentario