Proxy inverso para el protocolo Gemini

Para redireccionar el tráfico de Gemini a un servidor específico, podemos crear un proxy inverso con Nginx de una manera relativamente sencilla. El caso de uso es el siguiente: Un dominio apunta al servidor A, pero el servidor Gemini esta en el servidor B. En resumen, necesitamos redirigir el tráfico de Gemini de un servidor a otro.

Requisitos

  • Dominio apuntando a la IP del servidor. Por ejemplo, gemini.example.com apunta al servidor donde esta Nginx instalado. En este caso, el servidor A.
  • Nginx instalado y funcionando. En caso contrario podemos instalarlo con apt install nginx si estamos en un sistema basado en Debian. Debe estar en el servidor A.
  • Servidor Gemini levantado. En este caso, el servidor B.

Si ya estamos preparados, podemos empezar.

Configuración de Nginx

Nginx no esta preparado para manejar el protocolo Gemini por defecto, por lo que lo resolveremos instalar un módulo adicional para poder redireccionar puertos. Si estas acostumbrado a trabajar con comandos unix, también podrías utilizar socat o nc.

Instalamos el módulo con el siguiente comando, si usas Debian o Ubuntu:

apt install libnginx-mod-stream

Una vez instalado, podemos añadir la configuración necesaria para redirigir el tráfico de Gemini a un servidor específico.

Dentro de la configuración de Nginx, en /etc/nginx/nginx.conf, añadimos el siguiente bloque:

stream {
    upstream gemini {
        server 1.2.3.4:1965;
    }

    server {
        listen 1965;
        proxy_pass gemini;
        ssl_preread on;
    }
}

La dirección 1.2.3.4 es la IP del servidor donde queremos redirigir el tráfico (IP del servidor B). El puerto 1965 es el puerto por defecto del protocolo Gemini.

Guardamos los cambios y reiniciamos Nginx.

systemctl restart nginx

¡Ya hemos terminado! ¿Ves? No era tan complicado.

Recuerda que tu servidor Gemini debe gestionar los certificados SSL, ya que Nginx no puede hacerlo por ti con la configuración actual. Te recomiendo utilizar Agata, un servidor Gemini escrito en Rust que crea y autofirma los certificados automáticamente.

This work is under a Attribution-NonCommercial-NoDerivatives 4.0 International license.

Will you buy me a coffee?

You can use the terminal.

ssh customer@andros.dev -p 5555

Written by Andros Fenollosa

July 26, 2024

2 min of reading

You may also like