Mi aplicación está dividida en un contenedor docker backend y frontend que se ejecutan en un servidor oceánico digital. Compré un dominio e inserté las rutas proporcionadas desde digital ocean en mi DNS namecheap. Estoy usando el bloque de servidor nginx para enrutar mi interfaz al servidor y me gustaría que se comunique con mi contenedor de docker de backend. Actualmente estoy viendo este tutorial de faraday.

Mi contenedor de frontend se ejecuta en localhost:3000 y mi backend se ejecuta en localhost:5000; Y configuré los puertos para que se ejecuten cuando la ubicación sea server_name /. ¿Cómo sabrá mi bloque de servidor nginx si está cargando la interfaz o el backend en el dominio, ya que se espera que ambos ejecuten proxy_pass en la ubicación /?

Quiero mostrar el frente en server_name proporcionado pero aún puedo acceder a mi backend

server{
    server_name newlife.life;
    access_log /var/log/nginx/st-access.log
    error_log /var/log/nginx/st-error.log debug
    
    location / {
        proxy_pass http://localhost:3000;
    }
    location / {
        proxy_pass http://localhost:5000;
    }

}
0
DustBoy 23 ene. 2021 a las 11:07

1 respuesta

La mejor respuesta

Su interfaz puede realizar las llamadas de backend en una subruta diferente. Estas solicitudes llegarán a nginx y luego nginx puede enviarlas al backend reescribiendo la URL usando el módulo http_rewrite.

Consulte https://nginx.org/en/docs/http/ngx_http_rewrite_module.html

Ejemplo:

location /backend {
    proxy_pass localhost:5000;
    rewrite  ^/backend/(.*)  /$1 break;
}
1
Shashank V 26 ene. 2021 a las 05:25