2013-04-26 2 views
4

Этот вопрос может показаться немного странным, но, возможно, с решением для слабого человека в VCL проанализировать подписанный запрос (с общий секретный ключ, например, решение HMAC для бедняков), созданное сайтом реферера (основного), и только обслуживать контент от лака, если подпись правильная и (подпись) временная метка не истекла?Varnish S3-like, подписанный, ограниченный по времени запрос до доставки объектов, в VCL

То же, что и Amazon S3, где вы можете легко создать подписанный временный URL-адрес вашего S3-объекта, срок действия которого истекает в течение определенного количества секунд.

Примечание: Я не говорю о истечении срока действия кеша здесь, но истекает срок действия URL-адреса для клиента.

Это становится удобно, когда вы хотите только предоставить временные URL-адреса своим пользователям, чтобы предотвратить долгосрочное хотлинкирование без проверки заголовка referrer-заголовка.

So - Решение для временного URL-адреса в VCL (желательно в vcl_recv), в результате чего истекает срок действия внутреннего объекта). Возможно ли это без создания VMOD?

Edit:

Я нашел другой способ санкционирования содержания с лаком:

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), чтобы заставить Larnish дать вам временную метку unix.

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

дайджеста VMOD на GitHub:

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

Здравствуйте, я пытаюсь сделать что-то вроде этого, но я не могу использовать std.integer ((теперь + "0s"), 0). Он терпит неудачу из-за того, что теперь + 0s - DURATION, а не String ... У вас есть идея? – aligot