Activos de la aplicación de destino no cargados con nginx proxy_pass

Activos de la aplicación de destino no cargados con nginx proxy_pass

Tengo un proxy nginx básico ejecutándose en http://127.0.0.1:8080.

Este es el nginx.conf:

events {}
http { 
    server {
        listen 8080;
        server_name 127.0.0.1;
        rewrite_log on;
        error_log  /var/log/nginx/error.log notice;


        location / {
            proxy_pass http://127.0.0.1:5200;
            proxy_set_header  Host 127.0.0.1:5200;
        }
        location /api {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header  Host 127.0.0.1:8000;
        }
        location = /app2 {
            return 302 /app2/;
        }
        location /app2/ {
            proxy_pass http://127.0.0.1:5300/;
            proxy_set_header  Host 127.0.0.1:5300; 
        }

    }
}

Al presionar http://127.0.0.1:8080/app2, se muestra la aplicación que se ejecuta en el puerto, 5300pero los activos no se cargan correctamente. Sospeché que nginx está enviando la solicitud de los activos a la otra aplicación que se ejecuta en el puerto 5200, que es location /. Detuve esta aplicación para confirmar y este es el registro de nginx (tenga en cuenta que el flujo ascendente se muestra como, http://127.0.0.1:5200...pero debería ser http://127.0.0.1:5300...)

2023/09/17 23:47:32 [error] 29#29: *10 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: 127.0.0.1, request: "GET /assets/css/fonts/Pe-Icon-Stroke/Pe-icon-7-stroke..ttf?d7yf1v HTTP/1.1", upstream: "http://127.0.0.1:5200/assets/css/fonts/Pe-Icon-Stroke/Pe-icon-7-stroke..ttf?d7yf1v", host: "127.0.0.1:8080", referrer: "http://127.0.0.1:8080/app2/"
127.0.0.1 - - [17/Sep/2023:23:47:32 +0000] "GET /assets/css/fonts/Pe-Icon-Stroke/Pe-icon-7-stroke..ttf?d7yf1v HTTP/1.1" 502 559 "http://127.0.0.1:8080/app2/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
2023/09/17 23:47:32 [error] 29#29: *10 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: 127.0.0.1, request: "GET /assets/css/fonts/Font-Awesome/fontawesome-webfont..ttf?v=4.7.0 HTTP/1.1", upstream: "http://127.0.0.1:5200/assets/css/fonts/Font-Awesome/fontawesome-webfont..ttf?v=4.7.0", host: "127.0.0.1:8080", referrer: "http://127.0.0.1:8080/app2/"
127.0.0.1 - - [17/Sep/2023:23:47:32 +0000] "GET /assets/css/fonts/Font-Awesome/fontawesome-webfont..ttf?v=4.7.0 HTTP/1.1" 502 559 "http://127.0.0.1:8080/app2/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"

Errores de la consola: Errores de la consola

Veo un problema similar para http://127.0.0.1:8080/apilos activos no cargados. También intenté reescribir reglas con combinaciones de expresiones regulares diferenciales, pero obtuve errores similares.

Cómo configurar nginx para enrutar a diferentes aplicaciones y cargar sus activos correctamente.

Respuesta1

Después de más investigaciones y pruebas, la rewritesolución detallada enhttps://stackoverflow.com/questions/62836801/nginx-reverse-proxy-how-to-serve-multiple-appsfuncionó en mi caso.

Este es el fragmento que agregué a mi nginx.conf para que los activos de app2 se carguen correctamente

if ($http_referer ~ https?://[^/]+/app2/(.*))
{
    # rewrite request URI only if it isn't already started with '/app2' prefix
    rewrite ^((?!/app2).*) /app2$1;
}

información relacionada