Varnish: вызов vcl_pipe условно

Я понял, глядя на диаграмму конвейера Varnish , что vcl_pipe может быть вызван только из vcl_recv .

Я настраиваю VCL для обслуживания двоичных ресурсов из серверной части в зависимости от некоторых условий, включая контроль доступа.

Как я думал об этом, пока что так: пройти все мои проверки, включая выход из vcl_recv ; если установлены условия для потоковой передачи ресурса, установить флаг; перезапустить транзакцию; сначала проверьте флаг в vcl_recv , и, если он установлен, вызовите vcl_pipe .

Единственная серьезная проблема заключается в том, что я не знаю, как установить флаг (например, в http.request ), который не удалось подделать заголовком запроса. Таким образом, вызывающий абонент, который знает мой VCL, может легко установить флаг конвейера и обойти все проверки.

Другой вариант - сохранить все проверки в vcl_recv , но это может быть неудобно или даже невозможно.

Предложения будут оценены. Спасибо.

0
задан 9 September 2020 в 21:37
1 ответ

Единственная серьезная проблема заключается в том, что я не знаю, как установить флаг

Вы можете снять его в начале вашего vcl_recv, если количество перезапусков равно нулю (это указать «начальную» посадку в VCL, например

sub vcl_recv {
    if (req.restarts == 0) {
        unset req.http.X-Foo; 
    }

О, и я нашел только именно то, что вы искали при получении синтаксиса для этого :)

1
ответ дан 9 September 2020 в 18:48

Теги

Похожие вопросы