reverso - set reverse proxy nginx



proxying urls relativas con nginx (1)

En base a tus comentarios actualizados; si el back-end upstream envía el encabezado del referer , podrías hacer algo como esto:

location ~* ^/(css|js)/.+\.(css|js)$ {            
        #checking if referer is from app1            
        if ($http_referer ~ "^.*/app1"){
            return 417;
        }    

        #checking if referer is from app2
        if ($http_referer ~ "^.*/app2"){
            return 418;
        }    
    }
    error_page   417  /app1$request_uri;
    error_page   418  /app2$request_uri;


    location /app1 {        
         proxy_pass  http://app1.com;
    }

    location /app2 {
        proxy_pass http://app2.com;
    }

Por ejemplo, si el backend en app2.com solicita el test.css de la siguiente manera:

curl 'http://example.com/css/test.css' -H 'Referer: http://app2.com/app2/some/api'

La solicitud aterriza aquí:

/app2/css/test.css 

Mi pregunta es similar a Nginx Relative URL to Absolute Rewrite Rule? - pero con un toque adicional.

Tengo nginx actuando como un servidor proxy, que representa proxies para múltiples aplicaciones, similar a esta configuración (simplificada):

server {
  listen 80;
  server_name example.com;

  location /app1 {
    proxy_pass   http://app1.com;
  }
  location /app2 {
    proxy_pass http://app2.com;
  }
}

Esto funciona bien, pero como en la otra pregunta, estas aplicaciones ( app1 y app2 ) usan urls relativas como /css/foo.css o /js/bar.js . También es un gran problema pedirle a todas las aplicaciones que cambien a algo como /app1/css/foo.css .

¿Es posible que nginx averigüe de forma inteligente qué aplicación debe manejar la solicitud? FTR, los usuarios estarían accediendo a estas aplicaciones de esta manera:

http://example.com/app1/fooaction o http://example.com/app2/baraction .

Si es importante, todas las aplicaciones son aplicaciones basadas en Java / Tomcat.

TIA!





reverse-proxy