我尝试从 azure blob 提供 angular 应用程序,问题是我无法使用 URI 和正则表达式进行代理。
我的配置是:
location /web {
proxy_pass https://blob.com/web/index.html;
}
location ^~ /monitor {
proxy_pass https://blob2.net/angular/index.html;
}
location ~* \.(js|map|jpg|jpeg|png|ico)$ {
proxy_pass https://blob2.net/angular;
}
JS 文件应该来自 blob2/angular,因为它们位于那里。但是使用此配置,我遇到了异常“proxy_pass 不能有 URI 部分...”,这意味着 proxy_path 不能有带正则表达式的 uri。好的,所以我将最后一条语句更改为:
location ~* \.(js|map|jpg|jpeg|png|ico)$ {
rewrite ^ /angular$1;
proxy_pass https://blob2.net;
}
但仍然不起作用。
更新 将配置更改为
location ~* (\.(?:js|map|jpe?g|png|ico))$ {
proxy_pass https://angularweb.blob.core.windows.net/angular/$1;
}
但是现在文件是404。日志中什么都没有,只有“31.168.50.6 - - [13/Jun/2017:10:28:53 +0000]“GET /inline.bundle.js HTTP/1.1”404 216“ - ”“Mozilla/5.0(Windows NT 10.0; Win64; x64)AppleW$”
答案1
您应该能够使用这个位置块:
location ~* (\.(?:js|map|jpe?g|png|ico)$ {
proxy_pass https://blob2.net/angular/$1;
}
在这里,我们将文件名捕获到$1
变量中,然后在proxy_pass
目标中使用该变量。
我还在正则表达式中组合了jpeg
和,并通过将其添加到表达式的开头jpg
使正则表达式的后缀组不再被捕获。?: