En ocasiones tenemos servicios o aplicaciones web que escuchan directamente a un puerto interno. Para evitar acceder a dicha aplicación o servicio por la IP del servidor, una configuración que podemos hacer es acceder desde un Nginx Proxy.

Esta configuración nos da algunas ventajas, ya que podemos configurar un subdominio o dominio y por lo tanto configurar acceso HTTPS.

En este tutorial vamos a explicar como configurar Nginx para que haga de proxy para acceder al puerto de forma interna y que sea Nginx quien responda a la petición desde fuera. Por lo tanto, contamos que Nginx ya está configurado en el servidor.

Configuración de Nginx Proxy

Tendremos que crear o editar nuestro fichero de configuración para Nginx de nuestra aplicación, por lo general se debería de encontrar en /etc/nginx/sites-enabled y deberemos de tener el siguiente contenido:

server {
    listen         80;
    server_name    [SUB_DOMINIO];
}

server {
    listen 443 ssl;
    server_name [SUB_DOMINIO];

    location / {
        proxy_pass          http://localhost:[PUERTO_INTERNO];
        proxy_set_header    Host    $host;
        proxy_set_header    X-Forwarded-For $remote_addr;
        proxy_set_header    X-Real-IP   $remote_addr;
        proxy_pass_header   server;
    }
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log notice;
}

Deberemos de tener en cuenta, de que tenemos que cambiar algunos parámetros de esa configuración. Lo primero será configurar correctamente el server_name y cambiar [SUB_DOMINIO] por un dominio o subdominio que queramos que tenga nuestra aplicación o servicio. Por otro lado, deberemos de modificar el proxy_pass y cambiar el [PUERTO_INTERNO] por el puerto que esté utilizando nuestra aplicación o servicio.

Por ejemplo, para Grafana que escucha internamente por el puerto 3000, la configuración sería la siguiente:

server {
    listen         80;
    server_name    grafana.voidnull.es;
}

server {
    listen 443 ssl;
    server_name grafana.voidnull.es;

    location / {
        proxy_pass          http://localhost:3000;
        proxy_set_header    Host    $host;
        proxy_set_header    X-Forwarded-For $remote_addr;
        proxy_set_header    X-Real-IP   $remote_addr;
        proxy_pass_header   server;
    }
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log notice;
}

Con esta configuración, sería suficiente para acceder por dominio a nuestra aplicación. Únicamente queda reiniciar Nginx tras comprobar la sintaxis y luego crear el certificado con certbot.

# nginx -t
# systemctl restart nginx
Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación