2017-04-10 48 views
0

我有一個簡單的VCL文件,如下所示:當我嘗試使用std.syslog時,Varnish基本配置文件會拋出「VCL編譯失敗」。爲什麼?

vcl 4.0; 

import std; 

backend default { 
    .host = "127.0.0.1"; 
    .port = "3333"; 
} 

sub vcl_recv { 
    std.log("req.host: "+req.host); 
} 

sub vcl_backend_response { 

} 

sub vcl_deliver { 

} 

當我嘗試用這個配置在我的Mac開始varnishd,我得到以下錯誤:

Error: 
Message from VCC-compiler: 
Symbol not found: 'req.host' (expected type STRING): 
('/Users/jononomo/dev/my_project/deploy/testing.vcl' Line 30 Pos 26) 
    std.log("req.host: "+req.host); 
-------------------------########-- 

('/Users/jononomo/dev/my_project/deploy/testing.vcl' Line 30 Pos 5) -- ('/Users/jononomo/dev/my_project/deploy/testing.vcl' Line 30 Pos 25) 
    std.log("req.host: "+req.host); 
----#####################---------- 

Running VCC-compiler failed, exited with 2 
VCL compilation failed 

我已經嘗試了不同的變化這一行:

std.log("req.host: "+req.host); 

如:

std.log(req.host: '+req.host); 
std.log("req.host: ",req.host); 
std.log('req.host: ',req.host); 
std.log('hello'); 

但他們都沒有工作。

如何從我的VCL文件進行簡單日誌記錄?

謝謝。

更新:std.log("hello")似乎編譯...但是,我需要記錄請求對象的信息和req,request等不存在。

回答

1

使用req.http.host代替:

vcl 4.0; 

import std; 

backend default { 
    .host = "127.0.0.1"; 
    .port = "3333"; 
} 

sub vcl_recv { 
    std.log("req.host: " + req.http.host); 
} 

sub vcl_backend_response { 

} 

sub vcl_deliver { 

} 
+0

謝謝 - 和正確的!但是,我怎樣才能更普遍地檢查'req'對象呢? – jononomo

+0

無法轉儲''''req'''對象及其所有內容,但文檔[here](http://www.varnish-cache.org/docs/4.0/reference/vcl.html#req )包含有關可用變量的一些見解。所以基本上'''req.http.arbitary-header-name'''允許你在請求中檢查客戶端提供的任何HTTP頭。 –

相關問題