我已经为网站上的静态内容设置了反向代理。一切正常,唯一的问题是,有几个页面的静态内容不在该位置。我正在尝试只代理部分页面的内容,或者更简单的反向代理除少数页面之外的所有页面的内容。
当前代理
location /sites/default/files/ {
proxy_set_header Host url.com;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_pass https://url.com;
}
但我需要某种方式来执行以下操作(我知道这种语法是 100%错误的,只是为了给出我想做的事情的想法)
location /sites/default/files/ {
if (request_url != '/cart' || request_url != 'checkout') {
proxy_set_header Host url.com;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_pass https://url.com;
}
}
答案1
经过几个小时的测试和谷歌搜索,我找到了解决方案。还有其他类似的解决方案,但没有一个是我想要的。下面是我最终为实现该解决方案所做的事情。
首先,我创建了一个变量映射,该变量映射根据 NGINX 中的 $http_referer 值有条件地设置值
map $http_referer $resources_location {
default "url.com";
"~*/page2" "url2.com";
"~*/page3" "url2.com";
}
这将获取变量 $http_referer,并根据 $http_referer 的值设置变量 $resources_location。
默认是主 url,然后我使用正则表达式来确定页面中是否有 /page2、/page3。
我认为的一个问题是https://url.com/page2会触发它,所以https://url.com/sub/page2。我没有必要担心这个,但有人可能会担心,所以我也会测试一下。
然后我使用在代理中设置的新变量
location /sites/default/files/ {
proxy_set_header Host $resources_location;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_pass https://${resources_location};
}
我是 NGINX 的新手,所以如果有可以做得更好的事情,请告诉我!!