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];
return 301 https://$server_name$request_uri;
}
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;
return 301 https://$server_name$request_uri;
}
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
Comentarios