Сквид А может использоваться для этого, однако существуют некоторые проблемы, которые необходимо не упустить:
Сквид еще не поддерживает кэширование частичного содержания, поэтому если ваше приложение будет использовать запросы диапазона вместо того, чтобы загрузить целый файл, то у вас будут некоторые проблемы. Можно настроить Сквид для выборки целого файла в кэше по запросу диапазона, но в этом случае он заблокируется, пока целый файл не загружается - если кэшируемый звуковой файл является устаревшим, и новая копия должна быть загружена, пользователи приложения должны будут ожидать сервера для загрузки целого файла, прежде чем приложение сможет играть его.
Ваше приложение должно использовать HTTP для выборки файлов, иначе у вас будут ошибки сертификата, если ваш прокси попытается прервать Подключения HTTPS,если вы не создадите сертификат для прокси и заставляете ваше приложение доверять ему, но затем все остальное помимо вашего приложения также бросит ошибки сертификата HTTPS, и вы ничего не можете делать с этим, обычно прерывание HTTPS является плохой практикой, если вы не проясняете своим пользователям и заставляете их установить сертификат.
, Чтобы вынудить трафик клиента пройти через Сквид без любой конфигурации с их стороны необходимо настроить Сквид как прозрачный прокси и затем использовать некоторое волшебство брандмауэра на пользовательском использовании шлюза для достижения Интернета для перенаправления всего Трафика HTTP к серверу Сквида:
http_port 3128 intercept # enable transparent proxy mode
Что касается конфигурации шлюза это зависит от того, какой брандмауэр работает там, для IPtables что-то вроде этого должно работать, предполагая, что ваш сервер Сквида находится позади того же шлюза как ваши пользователи:
iptables -t nat -A PREROUTING -s -p tcp --dport 80 -j ACCEPT # accept HTTP traffic from the Squid
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination :3128 # redirect your user's HTTP traffic to Squid
iptables -t nat -A POSTROUTING -j MASQUERADE # probably not needed since your gateway already has this
Ваш должен смотреть на документация Сквида , у них есть некоторые примеры для конфигурирования брандмауэров предприятия для этого.
Не работает, как вы хотите, насколько вы печатаете имя хоста до всех строк, хранящихся в строке . $ Var
. Вместо того, чтобы зацикливаться и печатать имя хоста до каждой строки.
Вот один из способов петли через них, используя трубу и awk
snmpwalk -v2c -c private ${ip} .1.1.1.6 | awk -vHost="${hostname}" '{print Host"=>"$0}'
Вместо того, чтобы хранить вывод целиком (со встроенными символами новой строки) в переменной скаляра, можно было (я не говорил, что должен ) хранить строки в переменной массива.
С помощью ksh93
, mksh
, bash
, zsh
в эмуляции sh
:
IFS='
' # split on newline
set -f
var=($(snmpwalk -v2c -c private "$ip" .1.1.1.6))
А затем используйте printf
, как:
printf "$hostname=>%s\n" "${var[@]}"
Это предполагает, однако, что $hostname
не содержит символов процента или обратного слеша.
rc
и zsh
проще:
rc
:
var = (``(").
'){snmpwalk -v2c -c private $ip .1.1.1.6}))
printf %s\n $hostname'=>'^$var
zsh
:
var=(${(f)"$(snmpwalk -v2c -c private $ip .1.1.1.6)"})
printf '%s\n' $hostname'=>'$^var
(обратите внимание, что все эти решения игнорируют пустые строки)
Я не думаю, что это хорошая идея, чтобы присвоить переменной весь вывод команды, а затем сделать форматирование. Но если вы хотите это сделать, вы можете использовать printf
для форматирования. Ключом к этому является расширение имени хоста
внутри строки форматирования, так что только на список пар тип-значение в var
будут влиять спецификаторы форматирования (%s
и %d
в данном случае), и printf
гарантирует повторное использование спецификаторов формата для каждой пары данных:
var=`snmpwalk -v2c -c private ${ip} .1.1.1.6`
printf "${hostname}=>%s %d\n" ${var}
(Примечание: Вокруг ${var}
нет кавычек. )