NGINX 根据 URL 设置反向代理标头

NGINX 根据 URL 设置反向代理标头

我已经为网站上的静态内容设置了反向代理。一切正常,唯一的问题是,有几个页面的静态内容不在该位置。我正在尝试只代理部分页面的内容,或者更简单的反向代理除少数页面之外的所有页面的内容。

当前代理

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 的新手,所以如果有可以做得更好的事情,请告诉我!!

相关内容