Gui*_*bod 2 optimization varnish varnish-vcl
我是清漆新手。在编辑后端选择器子例程时,我发现自己在 Varnish 配置文件中寻找早期返回模式。
\n\nsub select_backend {\n if (req.http.host ~ "tracking\\..*") {\n set req.backend = tracking;\n }\n\n if (req.http.host ~ "myapp1.domain.com") {\n if (req.url ~ "^/insecure/path") {\n error 403 "Forbidden";\n }\n set req.backend = app1;\n }\n\n if (req.http.host ~ "myapp2.domain.com") {\n set req.backend = app2;\n }\n}\n\nsub vcl_recv {\n // other stuffs\n call select_backend;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如果没有正确的返回/退出语句,则存在更改后端两次的风险(随着文件变得越来越复杂)。\n是否可以使用提前返回模式来避免这种情况?如果不是,我如何\xc2\xa0避免if/elseif模式而不浪费性能?
小智 5
目前还没有好的方法可以做到这一点,正如VCL 基础知识的语法部分所解释的:
VCL的“return”语句将控制从VCL状态引擎返回给Varnish。如果您定义自己的函数并从默认函数之一调用它,则键入“return(foo)”不会将执行从自定义函数返回到默认函数,而是将执行从 VCL 返回到 Varnish。这就是为什么我们说 VCL 有终止语句,而不是传统的返回值。
其他一些人也有类似的需求,建议是:
if (req.http.host ~ "tracking\..*") {
set req.backend = tracking;
} elsif (req.http.host ~ "myapp1.domain.com") {
if (req.url ~ "^/insecure/path") {
error 403 "Forbidden";
}
set req.backend = app1;
} elsif (req.http.host ~ "myapp2.domain.com") {
set req.backend = app2;
}
Run Code Online (Sandbox Code Playgroud)
如果保留该图案,if .. elsif则不应有机会设置背面两次。如果您保留单独的if { }块,则可能会发生这种情况。
| 归档时间: |
|
| 查看次数: |
1051 次 |
| 最近记录: |