我的问题类似于Nginx Relative URL to Absolute Rewrite Rule? - 但有一个额外的转折。
我有nginx充当代理服务器,它代理多个应用程序,类似于这个(简化)配置:
server {
listen 80;
server_name example.com;
location /app1 {
proxy_pass http://app1.com;
}
location /app2 {
proxy_pass http://app2.com;
}
}
此工作正常,但与其他问题一样,这些应用程序(app1
和app2
)使用相对网址,例如/css/foo.css
或/js/bar.js
。要求所有应用程序更改为/app1/css/foo.css
之类的问题也是一个大问题。
nginx是否可以智能地确定哪个应用程序应该处理请求? FTR,用户将访问这些应用程序:
http://example.com/app1/fooaction
或http://example.com/app2/baraction
。
如果重要,所有应用程序都是基于Java / Tomcat的应用程序。
TIA!
答案 0 :(得分:7)
根据您的更新评论; 如果上游后端发送引用标头,您可以执行以下操作:
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;
}
例如,如果app2.com上的后端,请求test.css,如下所示:
curl 'http://example.com/css/test.css' -H 'Referer: http://app2.com/app2/some/api'
请求落在这里:
/app2/css/test.css