varnish - 正则表达式编辑x-forwarded-for标头入站/出站

时间:2013-12-19 14:43:17

标签: regex header varnish

我很好奇,如果有人知道,是否可以构建一个

的清漆配置
  • 查看来自客户端的入站标头
  • 和regexp匹配,构建一个特定的头 - 传递给支持的Web服务器?

上下文: - 部署在3-(apache)-webserver池前面的Varnish服务器,充当缓存和LB. - 最近在清漆前放弃了第三方服务DDOS代理 - 现在所有对varnish的入站请求都有一个X-Forwarded-For:标头已经存在,表明“真正的”客户端IP地址是什么。 - 在apache主机上运行的后端PHP Web应用程序 - 希望只看到一个IP地址,而不是“正确的”XFF标头,它显示逗号分隔的列表IP1,IP2,IP3(用于外部代理;清漆作为代理) ,原始客户端IP - 例如) - 理想情况下我想做的是:让Varnish进行regexp模式匹配:在现有的入站X-F-F标头上重建;并删除外部DDOS代理IP地址

我在'default.vcl'文件中尝试了类似的东西,

set req.http.X-Forwarded-For = regsub(req.http.X-Forwarded-For,“123.123.123.123”,“”);

其中123.123.123.123是外部DDOS /代理的IP地址

但这肯定不起作用/不是正确的语法。我无法在网上找到好的资源来解释清漆中的regexp /或人们使用的清晰的例子。

如果有人能够朝着正确的方向发挥作用,当然会非常感激。


感谢下面的评论 - 我现在调整了我的配置如下,

if (req.http.x-forwarded-for) {
set    req.http.X-Forwarded-For = 
regsub(req.http.X-Forwarded-For, "\, 123\.123\.123\.123","");
           } else {
               set req.http.X-Forwarded-For = client.ip;
           }

if (req.http.x-forwarded-for) { set req.http.X-Forwarded-For = regsub(req.http.X-Forwarded-For, "\, 123\.123\.123\.123",""); } else { set req.http.X-Forwarded-For = client.ip; } 现在我在我的apache日志中找到了,例如,

这对我来说,正则表达式实际上并没有按我想要的那样做。有没有办法以交互方式“测试”清漆,即为给定的VCL规则集提供一些已定义的输入,然后获取清漆以输出特定的输出;一种“干运行”处理作为一种促进调试的方式?

谢谢!

0 个答案:

没有答案