Есть следующая задача:
наземный канал, роутер со сквидом, спутниковый канал на отдельном прокси.
Необходимо ограничить размер файлов (не более чем Х кбайт) через спутник и пускать их по земле.
На данный момент спутниковый прокси стоит как parent для сквида и на этот parent пропускается весь трафик не соответствующий мультимедийным расширениям:
acl localnet ...
acl media urlpath_regex -i /.avi$ ...
cache_peer_access deny media
cache_peer_access allow localnet
cache_peer_access deny allДля более надежной защиты от большого (и дорогого) трафика через спутник я пробовал использовать
reply_body_max_size 512000 deny media
#^^не ограничивать для всех мултимедиа файлов, т.к. они и так идут по земле
reply_body_max_size 512000 allow localnet
#^^ограничить размер остального трафика, который направляется через спутник.
НО ТАКАЯ конструкция не работает! ограничение срабатывает в любом случае, на все файлы, если в любом месте есть строка allow localnet, даже так:
reply_body_max_size 512000 deny all
reply_body_max_size 512000 allow localnet
reply_body_max_size 512000 deny all
Кто нибуть знает почему так и как это обойти?
На данный момент я сделал так:
reply_body_max_size 512000 allow !mediaПолучается что любой НЕ медиа файл размером более 512000 запрещен для загрузки в любом случае.
Задача состоит в разрешении файлов более 512000 ходить по земле, и не ходить через спутник.
Как это реализовать???
другими словами, как указать в acl максимальный размер файла?
вот что я нашел похожее по этому поводу,
но непонятно как это применить для reply_body вместо request_bodyOn Mon, 26 Apr 2004, Michael Gale wrote:
> Can I use "request_body_max_size" inside a acl ?
There only is one single limit in this directive.
But it is possible to invent a new acl for this using the external acl
interface. request_body_max_size looks into the Content-Length request
header, available to external_acl_type as %{Content-Length}
This silly shell script should work#!/bin/sh
while read line; do
set -- $line
length="$1"
limit="$2"
if [ "$length" -le "$2" ]; then
echo OK
else
echo ERR
fi
done
Use this asexternal_acl_type request_body %{Content-Length} /path/to/above/script
acl request_max_20MB request_body 20971520
This acl can then be used in http_access to match requests up to the given
size. If you need different sizes just define new acls with different
limits in bytes (20971520 == 20480 * 1024 == 20480 KB)Regards
Henrik