VCL

2013-04-26 60 views
4

這個問題看起來可能有點奇怪,但是用VCL中的窮人解決方案來解析已簽名的請求(帶有共享密鑰,也稱爲HMAC的窮人解決方案),由引用者(主)站點創建,並且只有在簽名正確且(簽名)時間戳未過期時才從清單提供內容。VCL

也就是說,與Amazon S3的工作方式類似,您可以在其中輕鬆創建一個簽名的S3對象臨時URL,該URL臨時URL將在指定的時間內過期幾秒鐘。

注意:我不是在說這裏的緩存對象到期,而是客戶端的URL到期。

當您只想給用戶發送臨時URL以防止長時間盜鏈而不檢查引用鏈接頭時,它會變得非常方便。

所以 - 對於VCL中的臨時URL(最好是在vcl_recv中),使得內部對象到期的問題不成熟 - 解決方案。沒有製作VMOD可能嗎?

編輯:

我發現光油授權內容的另一種方式:

http://monolight.cc/2011/04/content-authorization-with-varnish/

但它仍然不是我想要達到的目標。

此致敬禮!

回答

3

是的,這是可能的。

實質上,您需要驗證簽名(摘要vmod),從它所在的任何頭(regsub)中挑出時間戳,並將其與當前時間進行比較。

使用std.integer()投時間戳:

https://www.varnish-cache.org/docs/trunk/reference/vmod_std.html#integer 

使用內置的now變量VCL查找當前時間戳。您可能想要執行(now + 0s)以強制Varnish爲您提供unix時間戳。

https://www.varnish-cache.org/docs/trunk/reference/vcl.html#variables 

摘要VMOD在GitHub上:

https://github.com/varnish/libvmod-digest 
+0

您好,我想實現這樣的事情,但我無法使用std.integer((現+ 「0」),0)。它現在失敗了,因爲現在+ 0s是DURATION而不是String ...你有什麼想法嗎? – aligot 2014-04-06 16:36:06