pass - proxying urls relativas con nginx
reverse proxy apache (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!