##################################################################
# THIS DOCUMENTATION IS OUTDATED                                 #
# PLEASE REFER TO THE ORIGINAL DOCUMENTATION IN ENGLISH LANGUAGE #
##################################################################

README для ziproxy (CVS)

Ziproxy - прокси для сжатия http
Copyright (C)2002-2004 Juraj Variny <variny@naex.sk>
Copyright (C)2005-2009 Daniel Mealha Cabrita <dancab@gmx.net>

	Эта программа является свободным программным обеспечением; вы 	можете распространять и/или модифицировать ее под «Открытым 	лицензионным соглашением GNU 2.0», опубликованным Free Software 	Foundation или (на ваш выбор) любой другой более поздней версией.

	Эта программа распространяется в надежде на то, что кому-либо может 	стать полезной, но БЕЗ КАКИХ ЛИБО ГАРАНТИЙ; даже не 	подразумевает гарантии на ТОВАРНЫЙ ВИД или ПРИГОДНОСТИ НА 	ИСПОЛЬЗОВАНИЕ. Для более подробной информации обратитесь к 	«Открытому лицензионному соглашению GNU».

	Вы можете получить копию «Открытого лицензионного соглашения 	GNU» вместе с программой либо написать на почтовый адрес:Free 	Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 	USA

	Ziproxy - перенаправляющая (не кэширующая) прокси, которая сжимает c помощью gzip текстовые и html-файлы. Так же изменяет размер изображений путем конвертирования их в более худшее качество JPEG.
	Предназначена для использования при низкой скорости соединения с интернетом и подходит как для домашнего, так и профессионального использования.
	Ziproxy - полностью настраиваемый, имеет режим прозрачного проксирования, работает как в режиме демона, так и в (x)inetd, подробный журнал доступа с компрессией статистики, основную авторизацию и многое другое.


Для чего?
	HTML- суть обычный текст и может быть довольно большим, но так же может хорошо сжиматься. Большинство веб-браузеров поддерживают возможность получения сжатого в gzip содержания и вывода на экран в исходном виде. Немногие люди знают об этой возможности и поэтому не пользуются ей. Используя эту возможность можно увеличить скорость доступа к текстовым файлам, находящимся на сервере в несжатом состоянии; они могут быть сжаты с помощью прокси и отправлены через низкое интернет-соединение (типа диалапа). Пример увеличения скорости: HTML-страница размером в 100 килобайт может быть сжата до 7 килобайт после обработки ziproxy.
К стыду сказать, мы не можем посчитать тот же пример для аппаратной компрессии модема — это будет все равно хуже.
Даже для браузеров без поддержки gzip-сжатия, можно настроить работу с использованием перенаправления ssh-порта и пожинать плоды даже с более лучшим сжатием и временем ответа.

Более того, изображения на многих страницах непозволительно высокого качество и/или сохраняются в неиспользуемых форматах. Среднее сжатие всех изображений с использованием ziproxy - третья часть от оригинального размера   с редко видимой разницей. Анимированные GIF заменяются на статические.

Смысл в том, что вы устанавливаете его в провайдере или на быстром сервере в интернете («удаленный хост»). И используете прокси для своего модемного соединения с «локального хоста».


Требования у удаленному серверу:
libungif
libpng 
libjasper (если требуется поддержка JPEG2000)
libjpeg-6b 
zlib
GCC и GNU make. BSD make может не работать. Sun Make/CC не работает.


Установка
Для просмотра параметров конфигурирования, наберите: 

	$ ./configure --help 

Теперь запускаем:

	$ ./configure 
	$ make 
	$ make install 

эти команды скомпилируют и установят бинарные файлы ziproxy. По желанию, можно собрать с программами для теста, параметр --enable-testprogs:

	modifytest может использоваться для тестирования изменения HTML — читает файл из stdin и выводит результат в stdout.

	imgtest может использоваться для изображений, в параметрах командной строки указывается входящий и исходящий файл. 

	cfgtest может использоваться для проверки конфигурационного файла и значений по умолчанию.


Командная строка
ziproxy <-d|-i> [-c </path/to/ziproxy.conf>] [-f <IP.address or hostname>] [-h]
	-d запуск Ziproxy в режиме демона.
	-i запуск ziproxy в режиме [x]inetd mode.
	-c полный путь до конфигурационного файла (обычно, /etc/ziproxy/ziproxy.conf)
Если не указано, используются настройки по умолчанию.
	-f идентично параметру конфигурационного файла «OnlyFrom=», но с более высоким приоритетом. Если не указано, параметр не используется.
	-h вывод справки по параметрам командной строки


Конфигурационный файл
По умолчанию, конфигурационный файл находится в текущей директории.


Параметры только для демона
	WhereZiproxy
Устаревший параметр.

	Port=8080 
Порт для прокси-соединений.

	Address
Локальный адрес для прокси-соединений.
Если у вас больше одного сетевого интерфейса, это будет полезно для ограничения привязки к интерфейсам.
По умолчанию: Ziproxy привязывается ко всем интерфейсам.

	OnlyFrom=«IP.адрес»
Разрешение соединений только с указанного адреса. Можно указать диапазон
	OnlyFrom=«начальный.IP.адрес-конечный.IP.адрес»
По умолчанию: пусто (соединения разрешены отовсюду).

	NetdTimeout=240 
Время отсутствия активности перед закрытием демона. Для отключения установите 0.

	MSIETest=true/false 
Если inetd или xinetd и MSIE запущены под win2000/XP, то MSIE будет жаловаться на разорванное соединение. Это можно обойти установкой параметра в TRUE. Но тогда inetd будет запускать 3 процесса вместого одного на каждый запрос, поэтому это не подходит на ежедневное использование. Используется функция system() вместо exec().


Общие параметры
	Gzip=true/false
Пытаться сжать text/html/остальное с помощью gzip.
Этот параметр отвечает только за обработку трафика между Ziproxy и клиентом. Эта оптимизация не ограничивается параметром MaxSize.
(используется так же как и до версии ziproxy 2.3.0)

	Compressible={«shockwave»,«msword»,«java»} 
Подстроки для обозначения типов данных, попадающих под обработку gzip.
По умолчанию: пусто. 
если начинается с «application/»  - отбрасывается (результат: «x-javascript»)
если начинается с «x-», то также отбрасывается (результат: «javascript»)
если совпадает со строкой, описанной в параметре Compressible, ziproxy сжимает его. (third string above matches leading «java»)

	ImageQuality={17,20,23,25} 
Этот параметр имеет 4 значения, или можно вообще не указывать. Цифры задают качество исходящим JPEG-изображениям, основываясь на размере изображения (длина * ширина в пикселях).

1. меньше, чем 5000 пикселей
2. между 5000 и 50000 пикселей или менее, чем 150 пикселей
3. между 50000 и 250000 пикселей
4. более чем 250000 пикселей

Цифры имеют следующие значения:
между -100 и -1: конвертирует изображения в серый JPEG с указанным качеством.
0: ничего не делать с изображением.
Между 1 и 100: конвертировать изображение в цветной JPEG с указанным качеством. Если исходное изображение серое, результирующий JPEG может быть серым тоже. Ziproxy не всегда определяет серый цвет исходного изображения.
К примеру, ImageQuality={-15,20,25,0} означает: Изображение размером менее, чем 5000 пикселей будет конвертировано в серый JPEG с качеством 15. Изображения между 5000 и 50000 пикселями будут конвертированы в цветной JPEG с качеством 20. Изображения между 50000 и 250000 пикселями будут конвертированы в цветной JPEG с качеством 25. Изображения размером более чем 250000 пикселей не будут подвергаться обработке.

	JP2Rate={0.15,0.1,0.04,0.03}
 Параметр устаревший.
 См: JP2ImageQuality

	JP2ImageQuality={20,15,15,15}
Качество изображения указывается между 100 (отличное) и 0 (отвратительное).
Этот параметр похож на «ImageQuality», за исключением того, что относится к JP2K файлам. JP2K, идеологически, работает по другому и имеется установка «оценки» («rate»), вместо «качество» («quality»).
В контексте Ziproxy мы хотим использовать фиксированное качество с нефиксированным битрейтом.
Таким образом, изображение анализируется для определения оценки (просто) отражения качества, которое имеет  изображение, сжатое с помощью JPEG.
Этот параметр является аналогом устаревшего «JP2Rate».
Этот параметр требует сборки Ziproxy с библиотекой libjasper.

	ZiproxyTimeout=seconds
Если обработка запроса превысила указанное в секундах время или соединение просуществовало это же время без пользы (было остановлено) будет обрыв.
Это предупреждает обработку вечной остановки (или в течение долгого времени) в случае программного сбоя, либо остановки соединения.
Это НЕ приведет к обрыву скачивания больших файлов, а лишь ТОЛЬКО если соединение будет остановлено или произойдет программный сбой. Если указан «0», ограничения нет.
По умолчанию: 90 (секунд)

	UseContentLength=true/false
По умолчанию, если ziproxy изменяет/сжимает, то начинает отсылать данные только после того, как их размер будут определен (true).  Если вы выключите эту возможность, ziproxy будет начинать отсылать данные раньше, что позволит сделать веб-серфинг более быстрым. Но, по причине того, что браузер не знает длину данных, в некоторых случаях возможно разрыв соединений. Если вы вместо этого используете SSH-сжатие и ваш браузер идентифицирует себя как HTTP/1.1, вам следует отключить этот параметр (тогда ziproxy будет отсылать браузеру мусор)

	MaxSize=bytes
Максимальный размер файла для (рас)сжатия, в байтах;
Если установлено значение «0», то ограничение будет отсутствовать.
Это относится к размеру файла, получаемого с удаленного HTTP-сервера (сжат он или нет — не имеет значения)
Если размер файла превышает установленное ограничение, Ziproxy просто не будет обрабатывать поток, даже если пользователь использует gzip-сжатие (см. ниже).
Внимание: Если установить очень большой размер ограничения, то время ответа на запрос увеличится, так как Ziproxy потребуется скачать данные, прежде чем подвергнуть (рас)сжатию.
Установка небольшого значения будет предотвращать скачивание данных, бОльших, чем можно обработать (пересжатые jpg/png/gif, htmlopt, preemptdns..).
Обратите внимание на это, если:
	-  Доступно только сжатие gzip.
ИЛИ
	- Доступно сжатие gzip и другое, но данные больше установленного парамера MaxSize.
	Gzip-сжатие (и только оно) будет работать потоково.
По умолчанию: 1048576 (байт) 
(В ziproxy 2.3.0 и более ранних версиях по умолчанию используется «0»)

	MinTextStream=bytes
Минимальный размер текстового файла для пересылки в процессе модифицирования суффиксов. 
ЗАМЕЧАНИЕ: Обычно это имело отношение к gzip-сжатию (ziproxy 2.3.0 и более старых версиях), в данный момент это не важно, данные в gzip всегда отдаются потоково.
Файлы, меньше этого будут полностью обрабатываться, предварительно будучи помещенные в директорию /tmp (или похожей).
По причине производительности, поток данных будет заметно лучше (ни дисковой загрузки, ни увеличения времени ожидания), но размер некоторых файлов не будет журналироваться. (будет стоять размер '-1').
По умолчанию: 20000 байт.

	ViaServer=«произвольное значение»
Позволяет Ziproxy отправлять и проверять заголовок Via:
Если параметр установлен, Ziproxy  будет посылать и проверять заголовок Via: с полученной строкой, как идентификацию хоста. Иногда это бывает полезным для предотвращения закольцованного запроса. 
По умолчанию: не указан.

	ModifySuffixes=true/false 
Если ваш браузер не распознает изображения с отличным от типа изображения расширения, включите параметр. Обычно браузеры умеют подобное.
По умолчанию: false.
  
	AllowLookChange=true/false 
Если Ziproxy сжимает прозрачные или анимированные изображения, результатом может быть страница с поврежденным форматированием.
Включение этого параметра в false позволит Ziproxy пропускать сжатие этих изображений.
По умолчанию: false (true в версиях до-2.0.0).

	ProcessJPG=true/false
Если false, Ziproxy не будет пытаться пережать файлы в формате JPEG.
По умолчанию: true.

	ProcessPNG=true/false 
Если false, Ziproxy не будет пытаться пережать файлы в формате PNG.
По умолчанию: true.

	ProcessGIF=true/false 
Если false, Ziproxy не будет пытаться пережать файлы в формате GIF.
По умолчанию: true.

	ProcessJP2=true/false 
Если false, Ziproxy не будет пытаться пережать файлы в формате JP2 (JPEG 2000).
	Для этого параметра требуется сборка Ziproxy с поддержкой libjasper.
  По умолчанию: false.

	ProcessToJP2=true/false
Пытаться ли сжимать изображения в JP2K (JPEG 2000).
Даже если включено, могут быть опробованы другие форматы.
Веб-браузеры для поддержки изображений в формате JP2K могут потребовать установки различных внешних плагинов.
Если «ForceOutputNoJP2 = true», то этот параметр будет аннулирован и отключен.
Для этого параметра требуется сборка Ziproxy с поддержкой libjasper.
По умолчанию: false

	ForceOutputNoJP2=true/false
При включении параметра пытаться конвертировать все входящие изображения в формате JP2K в другой формат (обычно JPEG).
JP2K-изображения с не поддерживаемым содержимым обрабатываться не будут.
Так же этот параметр может использоваться для создания «JP2K-сжатых тоннелей» между двумя Ziproxy с узкой пропускной способностью и клиентами, которые не поддерживают JP2K. В таком случае, если клиенты и их Ziproxy находятся в LAN, то для наилучшего качестве изображения рекомендуется установить очень низкую (высокое качество) локальную выходную компрессию.
Этот параметр требует для своей работы  параметр «ProcessJP2 = true».
Для этого параметра требуется сборка Ziproxy с поддержкой libjasper.
По умолчанию: false

	AnnounceJP2Capability=true/false
При включении параметра, каждый запрос от клиента будет содержать заголовок «X-Ziproxy-Flags», оповещая о том, что включен Ziproxy с поддержкой JP2. Этот параметр имеет смысл включать при связке с другим Ziproxy.
Замечание: когда запрос прерывается другим Ziproxy, дополнительный заголовок не может быть отправлен удаленной стороне.
См. также: JP2OutRequiresExpCap
По умолчанию: false

	JP2OutRequiresExpCap=true/false
Полное название параметра: «JP2 Output Requires Explicit Capability»
Когда параметр включен (и включен JP2 вывод) Ziproxy будет только сжимать в JP2 только тем клиентам, которые его поддерживают — в Ziproxy должен быть установлен параметр AnnounceJP2Capability = true.
Этот параметр полезен когда вы хотите сжимать в JP2 только для клиентов, находящихся за локальной Ziproxy с параметром  ForceOutputNoJP2 = true, но в то же время у вас есть клиенты, подключенные напрямую и без поддержки JP2.
По умолчанию: false (никакой дискриминации для использования JP2 вывода)

	JP2Colorspace=VALUE
Цветовая модель для использования в процессе сжатия изображений в JP2K.
Возможные значения:
	0 - RGB
	1 - YUV
Если требуется что-либо другое, отличное от RGB, требуется дополнительная обработка перед конвертированием.
При изменении своими силами размер выходящих данных не изменяется и конвертирование с потерей качества.
Если вы планируете использовать параметры JP2CSampling* или JP2BitRes*, то очень предпочтительно включить  не-RGB цветовую панель.
Значение по умолчанию: 1 (YUV)
Замечание: некоторое jp2-ПО НЕ поддерживает ни какую другую цветовую модель, кроме как RGB и отображать не будет, либо будет искажать изображение.
Замечание: некоторое jp2-ПО НЕ поддерживает ни какую другую цветовую модель, кроме как RGB и отображать не будет, либо будет искажать изображение.

	JP2BitResYA={Y1,A1, Y2,A2, Y3,A3, Y4,A4}
Включение компрессии изображений B&W в JP2K.
Определяется разрешающая способность канала для каждого компонента:
Y (яркость) и A (источник, если указан)
в битах (мин: 1, макс: 8)
Определяется для каждого размера файла (см.  JP2ImageQuality).
Наименьшие изображения обрабатываются в первую очередь.
Последовательность: YAYAYAYA.
По умолчанию: все в битах

	JP2BitResRGBA={R1,G1,B1,A1, R2,G2,B2,A2, R3,G3,B3,A3, R4,G4,B4,A4}
Включение компрессии цветных изображений в  JP2K, с использованием модели RGB (см. JP2Colorspace).
Определяется разрешающая способность канала для каждого компонента:
R (красный), G (зеленый), B (синий) и A (источник, если указан)
в битах (мин: 1, макс: 8)
Определяется для каждого размера файла (см.  JP2ImageQuality).
Наименьшие изображения обрабатываются в первую очередь.
Последовательность: RGBARGBARGBARGBA.
Значение по умолчанию: разумные значения для наилучшего соотношения качества/сжатия.

	JP2CSamplingYA={ (см. выше) }
Параметр относится к изображениям B&W, сжатыми в JP2K.
Здесь вы можете определить примерную оценку для каждого компонента и для каждого размера изображения.
Последовательность:
Y_xpos, Y_ypos, Y_xstep, Y_ystep,  A_xpos, A_ypos, A_xstep, A_ystep, (изображение маленького размера)
... ... ... (изображение среднего размера)
и т.п.
Значение по умолчанию: все x/ypos=0 x/ystep=1 (ни один компонент subsampling не выбирается)
Замечание: Обычно, программное обеспечение понимающее jp2 НЕ поддерживает компонент subsampling  и будет некорректно работать.

	JP2CSamplingRGBA={ (см. выше) }
Параметры, применимые к цветным изображениям, сжатыми в JP2K, с использованием цветовой модели RGB (см. JP2Colorspace).
Здесь вы можете определить примерную оценку для каждого компонента,
для каждого размера изображений. 
Последовательность следующая:
R_xpos, R_ypos, R_xstep, R_ystep,  G_xpos, G_ypos, G_xstep, G_ystep,  B...  A... (изображение маленького размера)
... ... ... (изображение среднего размера)
и т.п.
По умолчанию: all x/ypos=0 x/ystep=1 (ни один компонент subsampling не выбирается)
Замечание: Обычно, программное обеспечение понимающее jp2 НЕ поддерживает компонент subsampling и будет некорректно работать. 

	JP2CSamplingYUVA={ (see below) }
Параметры, применимые к цветным изображением, сжатыми в JP2K, с
использованием цветовой модели YUV (см. JP2Colorspace).
Здесь вы можете определить примерную оценку для каждого компонента,
для каждого размера изображений. 
Последовательность следующая:
Y_xpos, Y_ypos, Y_xstep, Y_ystep,  U_xpos, U_ypos, U_xstep, U_ystep,  V...  A... (изображение маленького размера)
... ... ... (изображение среднего размера)
и т.п.
По умолчанию: осмысленные значения для хорошего качества изображения.
Замечание: Обычно, программное обеспечение понимающее jp2 НЕ поддерживает компонент subsampling и будет некорректно работать.

	ProcessHTML=true/false 
При включении параметра, ziproxy будет оптимизировать HTML-код перед попыткой (если включено) сжать его с помощью gzip. Этот параметр так же относится к javascript и CSS-данным, внедренным в HTML-код
Этот параметр зависит от других параметров: ProcessHTML_*.
  По умолчанию: false.
  *** ЭТО ЭКСПЕРИМЕНТАЛЬНЫЙ ПАРАМЕТР ***

	ProcessCSS=true/false 
При включении параметра, ziproxy будет оптимизировать CSS-код перед попыткой (если включено) сжать его с помощью gzip. Этот параметр зависит от других параметров ProcessHTML_*.
Относится ТОЛЬКО к одиночным CSS-файлам. CSS-код, внедренный в HTML-код, не обрабатывается.
По умолчанию: false.
  *** ЭТО ЭКСПЕРИМЕНТАЛЬНЫЙ ПАРАМЕТР ***

	ProcessJS=true/false 
При включении параметра, ziproxy будет оптимизировать javascript перед попыткой (если включено) сжать его с помощью gzip. Этот параметр зависит от других параметров ProcessHTML_*.

Относится ТОЛЬКО к одиночным файлам. javascript, внедренный в HTML-код, не обрабатывается.
По умолчанию: false.
  *** ЭТО ЭКСПЕРИМЕНТАЛЬНЫЙ ПАРАМЕТР ***

	ProcessHTML_CSS=true/false 
При включении параметра, ziproxy будет оптимизировать CSS-код, внедренный в HTML.
Функция активна только при включенном параметре ProcessHTML.
По умолчанию: true.

	ProcessHTML_JS=true/false 
При включении параметра, ziproxy будет оптимизировать javascript, внедренный в HTML.
Функция активна только при включенном параметре ProcessHTML.
По умолчанию: true.

	ProcessHTML_tags=true/false 
При включении параметра, ziproxy будет оптимизировать HTML-тэги. Т.е то, что заключено в кавычки, излишние пробелы, символы в большом регистре переформатировать в малый, 
Функция активна только при включенном параметре ProcessHTML.
По умолчанию: true.

	ProcessHTML_text=true/false 
При включении параметра, ziproxy будут оптимизировать текст, на практике будут удалены все излишние пробелы.
Функция активна только при включенном параметре ProcessHTML.
  По умолчанию: true.

	ProcessHTML_PRE=true/false 
При включенном параметре, ziproxy будет оптимизировать текст, помещенный между HTML-тегами <pre></pre>.
Функция активна только при включенном параметре ProcessHTML.
По умолчанию: true.

	ProcessHTML_TEXTAREA=true/false 
При включенном параметре, ziproxy будет оптимизировать данные, помещенные в теги TEXTAREA HTML.
Функция активна только при включенном параметре ProcessHTML.
По умолчанию: true.

	ProcessHTML_NoComments=true/false 
При включенном параметре, все неподходящие комментарии на HTML-уровне будут удалены. Javascript-код, помещенный в блок HTML-комментария не удаляется в любом случае.
Функция активна только при включенном параметре ProcessHTML.
По умолчанию: true.

	PreemptNameRes=true/false 
Приоритет распознавания  имени.
При включенном параметре Ziproxy пытается отрезолвить хосты, упомянутые в HTML-файлах для увеличения  скорости доступа (нет задержки для определения имени).
Этот параметр имеет смысл включать только если у вас есть кэширующий сервер имен или кэш имен.  Ziproxy НЕ кеширует хосты. (см. PDNSD, и т.п)
Если пользователь кликает на линк со страницы, обработанной Ziproxy ранее, задержка на распознавание имени будет отсутствовать.
ВНИМАНИЕ: Этот параметр во много раз увеличит запросы к DNS.
По умолчанию: false (true в версиях до-2.0.0).

	PreemptNameResMax=50 
Максимальное количество хостов, которое будет пытаться отрезолвиться.
(см. PreemptNameRes).
По умолчанию: 50

	PreemptNameResBC=true/false 
Фиктивная проверка, игнорирование доменных имен с зоной отличной от .nnnn,  .nnn или .nn. (напр. .info, .com, .br...)
По умолчанию: false.

	TransparentProxy=true/false 
Возможность обработки запросов как прозрачная прокси (будет так же принимать обычные запросы прокси)
В дополнение к использованию Ziproxy в качестве прозрачной прокси вам так же потребуется перенаправлять соединения с x.x.x.x:80 на ziproxy.host:ПОРТ_ПРОКСИ
По умолчанию: false.

	ConventionalProxy=true/false
Обрабатывать ли нормальные запросы прокси или нет.
Имеет смысл использовать при включенном параметре TransparentProxy.
Если включено прозрачное проксирование, обычно хорошей мыслью бывает
отключить данный параметр ибо в зависимости от размещения вашей сети, этот параметр может использоваться нехорошими пользователями для обхода ограничений, предоставляемые другим прокси-сервером, расположенным между Ziproxy и пользователями.
По умолчанию: true.

	AllowMethodCONNECT=true/false
Разрешать ли метод CONNECT.
Этот метод используется HTTPS, но может использоваться и для сервисов других типов (типа обмена сообщениями), которые поддерживают туннелирование через http-прокси. Если вы планируете обработку только HTTP-запросов (никаких HTTPS или чего-нибудь еще) вы можете отключить этот параметр для предотвращения потенциальных проблем сервиса. 
По умолчанию: true.

	OverrideAcceptEncoding=true/false
Если отключено, Ziproxy будет просто пересылать полученный от клиента
Accept-Encoding (данные могут или не могут быть запакованы gzip, в
зависимости от того, что скажет HTTP-клиент).
В данный момент этот параметр используется с постоянным извещением
удаленного HTTP-сервера о восприимчивости gzip. 
Это _НЕ_ имеет никакого отношения к поддержки gzip между Ziproxy и клиентом, вы можете оставить параметр включенной даже если у вас будут клиенты, не поддерживающие gzip. 
Ziproxy будет сжимать/расжимать данные относительно настроек клиента.
По умолчанию: true.

	DecompressIncomingGzipData=true/false
Включение/отключение встроенной gzip-декомпрессии Ziproxy.
Эта декомпрессия нужна тогда, когда удаленный сервер посылает данные,
уже сжатые gzip, но дальнейшее действие желательно (типа HTMLopt, PreemptDNS и т.п).
Отключение данной опции повлечет за собой снижение нагрузки и время
ожидания Ziproxy, т.к данные будут идти напрямую к клиенту.
Но обработка особенностей (htmlopt, preemptdns...) НЕ БУДЕТ работать с такими данными.
Предупреждение:
Если вы отключили этот параметр, но настроили Ziproxy обьявлять себя
на удаленном сервере как клиента, поддерживащего gzip: Пока
используется клиент без поддержки gzip, клиент может получить
запакованные данные и не будет знать, что с ними делать.
(== будет получать бесполезный мусор).
По умолчанию: true.

	RedefineUserAgent=«SuperBrowser/2.07 (бла бла бла бла)»
Замена данных User-Agent, посылаемые клиентом с определенной строкой,
ИЛИ определение User-Agent данным параметром, если строка отсутствует.
Если выключен, Ziproxy будет просто пересылать User-Agent от клиента.
В принципе, включение данной опции не потребуется. Поэтому она
закомментирована.
Этот параметр может быть вам полезен, если по каким либо причинам вы
решили идентифицировать всех клиентов с определенным
браузером/версией/операционной системой.
Некоторые сайты могут некоректно отображать данные, если клиент
использует не совсем тот браузер.
Некоторые веб-серверы могут вообще не предоставлять доступ, если
отсутствует User-Agent (к примеру: www.rzeczpospolita.pl).
По умолчанию: отсутствует (пропускает клиентское значение User-Agent).

	MaxUncompressedGzipRatio=2000
Когда Ziproxy получает данные в gzip, она пытается распаковать в соответствии с обработкой особенностей (HTMLopt, PreemptDNS и т.п.).
Это делает Ziproxy уязвимым для 'gzip-бомб' (напр. 10 Гб нулей, в архиве)
которые могут быть использованы для замедления производительности
либо даже аварийной остановке сервера.
В добавку к предотвращению/минимизации основной массы проблем, вы
можете ограничить максимальную пропорцию распаковки, относительно
оригинального файла.
Пользователь вместо этого будет получать страницу ошибки или (если уже
пересылка происходит) просто обрыв соединения с сервером.
Вы можете отключить данную возможность путем установки значения, равному '0'.
По умолчанию: 2000 (т.е 2000% == 20ти кратное сжатие)

	MinUncompressedGzipStreamEval=250000
При ограничении уровня декомпрессии параметром MaxUncompressedGzipRatio _и_ использование gunzip в потоке данных невозможно узнать размер файла до тех пор, пока передача не окончится. Поэтому Ziproxy проверяет их перед декомпрессией.
Проблема имеет свои, возможно, ложные положительные моменты: некоторые файлы вначале сжимаются лучше, чем в конце.
Для предотвращения/минимизации возникновения проблем, мы определили минимум исходящих (расжатых данных), генерируемых перед началом проверки уровня декомпрессии.
Если установлен '0', то уровень будет проверяться немедленно. При увеличении значения точность проверки уровня возрастет за счет уменьшения безопасности.
Потоки данных менее, чем указанное значение параметра не будут проверяться на уровень декомпрессии.
Данная возможность активна только при включенном параметре MaxUncompressedGzipRatio.
Не затрагивает данные, полностью загруженные в память (для дальнейшей обработки).
По умолчанию: 250000 (байт)

	CustomError400=«/полный/путь/error_file.html»
Определение сообщения об ошибке «Bad request»
(поврежденная ссылка, или ссылка неизвестного типа)
По умолчанию: <не определено> (собственное сообщение об ошибке)

	CustomError404=«/полный/путь/error_file.html«
Определение сообщения об ошибке «Unknown host»
(Ziproxy не показывает сообщение об ошибке «page not found»)
По умолчанию: <не определено> (собственное сообщение об ошибке)

	CustomError407=«/полный/путь/error_file.html»
Определение сообщения об ошибке «Proxy Authentication Required»
По умолчанию: <не определено> (собственное сообщение об ошибке)

	CustomError408=«/полный/путь/error_file.html»
Определение сообщения об ошибке «Request timed out»
По умолчанию: <не определено> (собственное сообщение об ошибке)

	CustomError409=«/полный/путь/error_file.html»
Определение сообщения об ошибке «Conflict»
По умолчанию: <не определено> (собственное сообщение об ошибке)

	CustomError500=«/полный/путь/error_file.html»
Определение сообщения об ошибке «Internal error»
(или ответ от сервера нулевой длины)
По умолчанию: <не определено> (собственное сообщение об ошибке)

	CustomError503=«/полный/путь/error_file.html»
Определение сообщения об ошибке «Connection refused»
(или недоступность сервиса)
По умолчанию: <не определено> (собственное сообщение об ошибке)

	PasswdFile=«/полный/путь/ziproxy.passwd»
Содержит в себе данные для авторизации в формате <пользователь>:<пароль>. Ограничение по длине строки - 128 символов.
ЗАМЕЧАНИЕ: Пароль находится в открытом виде.
По умолчанию: Файл не указан (идентификация отсутствует)

	Nameservers={«1.2.3.4», «11.22.33.44», ...}
Использование указанных серверов имен вместо тех, что прописаны в файле /etc/resolv.conf.
По умолчанию: Отключено. Ziproxy использует конфигурацию серверов имен операционной системы.

	BindOutgoing = {«234.22.33.44», «4.3.2.1», «44.200.34.11», ...}
Привязка исходящих соединений (к удаленному HTTP-серверу) к следующим (локальным) IP-адресам.
Это относится к _ИСХОДЯЩИМ_ соединениям, и _НЕ_ имеет отношения к сокету. 
Когда указано 2 или более IP-адреса, Ziproxy будет использовать каждый из них для собственного исходящего соединения. Все IP-адреса могут иметь следующие приоритеты:
Вы можете использовать этот параметр по любой из следующих причин:
1. Для использования определенных IP-адресов при подключении к удаленным HTTP-серверам.
2. Использовать 2 или более IP-адреса для баланса нагрузки (довольно примитивная реализация, т.к. основана на соединении и не принимает во внимание переданные байты).
3. У вас гигантская локальная сеть и определенные сайты (google.com, к примеру) блокируют ваши запросы по причине того, что большое их количество идет с одного IP.
Поэтому вы можете использовать 2 или более IP-адресов и делать так, чтобы ваши запросы словно приходят от разных машин.
Этот параметр _НЕ_ предоставляет возможность подделки пакетов, просто
лишь использование локальных IP-адресов хоста.
Замечание: При работе в режиме (x)inetd, вывод может быть привязан только к одному IP. 
Cм. также: BindOutgoingExList
По умолчанию: отключен (привязка к IP-адресу по умолчанию, определенным операционной системой).

	BindOutgoingExList=«/etc/ziproxy/bo_exception.list»
Параметр определяет файл, в котором содержится список доменов, к которым не следует применяет параметр «BindOutgoing».
Причиной использовать данную функцию могут быть некоторые сервисы, которым не нравится клиент, меняющий свой IP в течение одной сессии.
Некоторые почтовые сервисы отказывают в доступе или отказывают в авторизации.
Функция не работает при выключенном «BindOutgoing».
См. также: BindOutgoingExAddr
По умолчанию: пусто, ни один домен не исключен.

	BindOutgoingExAddr=«98.7.65.43»
Параметр определяет IP-адрес, который используется для доменов, указанных в списке «BindOutgoingExList».
Так же как и «BindOutgoing», этот IP-адрес может быть локальным IP сервера, с которого запущен Ziproxy.
Это может быть IP, указанный в «BindOutgoing», но это НЕ обязательно, может быть и совершенно другой адрес.
Функция не работает при выключенном «BindOutgoingExList»
По умолчанию: пусто, используется первый IP-адрес, прописанный в «BindOutgoing».

	WA_MSIE_FriendlyErrMsgs=true/false
Параметр разработан для псевдо-возможности MSIE «Show friendly HTTP error messages.»
Если User-Agent=MSIE, то тело сообщения об ошибке не изменяется/сжимается ни в коем случае.
Если происходит сжатие, то не ниже 256 или 512 байт и сообщение заменяется локальным.
В некоторых случаях тело сообщения содержит ключевые данные, типа HTML-перенаправления или похожие, и сообщение портится, если «дружественная ошибка» заменяет ее на себя.
Если вы уверены в том, что никто из пользователей не использует MSIE, или вы не поддерживаете пользователей с такой конфигурацией, вы можете отключить этот параметр и пользователи MSIE не смогут пользоваться компрессией.
Этот параметр никак не относится к другим клиентам, и им будут отсылаться сжатые сообщения об ошибках, если клиент их поддерживает.
По умолчанию: true.

	URLNoProcessing = «/etc/ziproxy/noprocess.list»
Этот параметр указывает файл, содержащий список ссылок, которые следует туннелировать без какой-либо обработки со стороны Ziproxy.
Список содержит полные ссылки (http://xxx/xxx) по одной в строке.
Ссылки  так же могут содержать маски звездочками.
Комментарии добавляются с префиксом '#' (как в шелле).
Этот параметр следует использовать когда страница неверно отображается после обработки Ziproxy и другие 
возможные варианты обхода не подходят.
Поэтому пока это является временным решением.

****** НЕ ЗАБЫВАЙТЕ СООБЩАТЬ ОБ ОШИБКАХ И
НЕСОВМЕСТИМОСТЯХ, МОЖЕТ БЫТЬ ИСПРАВЛЕНО ****** 
*** ЭТОТ ВАРИАНТ НЕ ПРЕДПОЛАГАЕТ БЫТЬ 
ОКОНЧАТЕЛЬНЫМ РЕШЕНИЕМ ***
По умолчанию: пустая строка (файл не указан, неактивно)


Параметры журналирования
Журналирование используется в основном для отладки. Если параметр LogFile не имеет никакого значения, журналирование выключено (по умолчанию).

	LogFile=«имя_файла»
Указание файла вывода журналирования. Формат строки совместимо с функцией strftime(), и вначале идет текущая дата.

	AccessLogFileName=«/что-нибудь_типа/var/log/ziproxy/access.log»
Файл, используемый в качестве журналирования доступа.
Формат файла: 
	TIME (unix как сек.мсек),
	PROCESS_TIME (мсек, с начала получения запроса до отсылки последнего байта клиенту),
	[USER@]ADDRESS (ADDRESS только при режиме демона, с [x]inet будет показывать '?'),
	FLAGS,
	ORIGINAL_SIZE,
	SIZE_AFTER_(RE)COMPRESSION,
	METHOD,
	URL.
  Где  ФЛАГИ могут быть:
	P (запрос как прокси)
	T (запрос как прозрачная прокси)
	S (метод соединения, обычно HTTPS данные)
	Z (время задержки на пересылку - см. ZiproxyTimeout)
	B (оборванная пересылка - как пользователем, так и удаленным хостом)
	W (тип содержимого был предположительно загружен в память, отсутствовал размер содержимого; и он оказался больше, чем указано в MaxSize, поэтому пропущено потоком),
	N (URL не представлен. см: параметр URLNoProcessing)
  По умолчанию: файл не указан (thus no access logging)

	AccessLogUserPOV=true/false
По умолчанию Ziproxy сообщает о размере настоящих входящих данных (с удаленного HTTP-сервера) в журнал доступа.
Если данные были сжаты gzip HTTP-сервером самостоятельно, входящие gzip-сжатие и данные изначально сжаты, журнал доступа показывает размер
данных неверно (потому что Ziproxy приходится распаковывать их до ограничений клиента).
Это вводит в заблуждение журнальный анализатор, как если бы клиент вместо
этого был подключен к серверу напрямую; величина пересланных данных этому клиенту будет несколько иным.
Для избежания подобных расхождений в статистике, вы можете журналировать вместо реального размера входящих данных -- размер данных,
полученные клиентом, якобы напрямую подключенным к серверу.
Только при включенном параметре «AccessLogFileName».
По умолчанию: false (сообщается реальный входящий размер).

	LogPipe={«command»,«-arg1»,«-arg2»} 
Этот параметр не совместим с [x]inend, работает только в режиме демона!
Если параметр LogFile уже присутствует, то стандартный вывод перенаправляет  команду в этот файл. К примеру, если у вас не хватает дискового пространства (закончилась квота) на удаленном хосте, вы можете начать сжимать журналирование налету.  Это неудобно тем, что возможно только после перезагрузки Ziproxy.

	NextProxy=«host.name»
	NextPort=8080 
Перенаправление всех данных на другой прокси-сервер.
Модификация/сжатие также поддерживается.


Компиляция под cygwin 
В ПРОЦЕССЕ НАПИСАНИЯ	

Компиляцию можно осуществить несколькими путями. Кстати, вам может понадобиться libungif в качестве зависимости X11. Для этого добавьте параметр -static в переменную LDFLAGS в Makefile:

LDFLAGS = -g $(SYSV_LIBS) -static -lgif -lpng -ljpeg -lm -lz

Преимущество статически слинкованного исполняющего файла ziproxy.exe в тому, что вы можете перенести его вместе с cygwin1.dll машину, где не установлен cygwin. Xinetd-сервер может так же потребовать cygwin.


Использование..
	С inetd:

В файле /etc/inetd.conf добавьте строку, где в <расположение> укажите путь до директории с исполняемым файлов.

	ziproxy stream tcp nowait.500 root /usr/sbin/tcpd <расположение>/ziproxy 
-i -c <расположение>/ziproxy.conf

В файле /etc/services добавьте строку, где в <port> укажите порт, который нужен для прокси:

	ziproxy <порт>

после этого перезапустите inetd.

	С xinetd:

Смотрите пример конфигурационного файла в дистрибутиве.


Режим демона (самостоятельный процесс)
Вместо использования запуска из-под inetd, вы можете так же запускать ziproxy под непривилегированным пользователем. Каждый раз, как вы подключаетесь к интернету, подключаетесь к удаленному серверу и запускаете с командой:

- для режима демона:

./ziproxy -d -c 'где_либо/ziproxy.conf' -f <ваш IP-адрес>

- для перенаправления порта:

./ziproxy -d -c 'где_либо/ziproxy.conf' -f 127.0.0.1 

Или устанавливаете  OnlyFrom=127.0.0.1 в конфигурационном файле, вместо ключа -f. Тогда будут возможны запросы только с вашей машины. Если вы забыли завершить процесс Ziproxy после отключения, он завершится самостоятельно (при указанном параметре NetdTimeout).


Автоматический вход по SSH
Используя публичный ключ идентификации вы можете авторизовываться без пароля, подробнее — см. man ssh-keygen. 


Прямое соединение
Вы можете указать вашему браузеру, чтобы он соединялся напрямую с удаленным хостом для использования ziproxy. Тогда будет доступно сжатие с помощью ziproxy (параметр Gzip=true), но ваш браузер должен поддерживать это. MS Internet Explorer требует настройки (см. ниже), Opera, Mozilla или Konqeror поддерживают.  Кроме того, может неработать, если удаленная машина находится за файрволом.


Перенаправление порта
Перенаправление порта SSH выполняется командой типа:

ssh yourlogin@remote.machine -C -L 8090:127.0.0.1:8080 -N

Теперь настройте ваш браузер для использования локальной прокси на порту 8090, а ziproxy использует порт 8080 на удаленном хосте. Все соединения между ними переносится и сжимается с помощью ssh. Заметки об автоматическом соединении описаны выше.

Подобное возможно только при использовании OpenSSH, для использования под Winows, вам потребуется OpenSSH, собранный под cygwin, который можно найти здесь http://www.networksimplicity.com/openssh/ . Это все. Если вы хотите внести изменения, существует параметр для ssh — CompressionLevel.


Прозрачное проксирование
Настройка Ziproxy для прозрачного проксирования:
1. - В файле ziproxy.conf: TransparentProxy = true
2. - Так же вам надо перенаправить соединения с 80 порта на порт прокси
     x.x.x.x:80 to ziproxy.host:PROXY_PORT

Примеры перенаправления трафика (Linux kernel >= 2.4 OSes):
!!! ЭТО НЕЗАКОНЧЕННЫЕ И НЕБЕЗОПАСНЫЕ СКРИПТЫ !!!

### Запросы с локальной машины --> удаленный хост Ziproxy 
$ /sbin/modprobe ip_tables
$ /sbin/modprobe iptable_nat
$ IPTABLES=/usr/sbin/iptables
$ ZIPROXY_HOST=200.56.78.90
$ ZIPROXY_PORT=8080
$ $IPTABLES -t nat -A OUTPUT -s 0/0 -p tcp --dport 80 -j DNAT --to ${ZIPROXY_HOST}:${ZIPROXY_PORT}

### Прозрачный роутинг HTTP-трафика И запуск Ziproxy
$ /sbin/modprobe ip_tables
$ /sbin/modprobe iptable_nat
$ IPTABLES=/usr/sbin/iptables
$ NET_INTERFACE=eth0
$ ZIPROXY_HOST=200.56.78.90
$ ZIPROXY_PORT=8080
$ $IPTABLES -t nat -A PREROUTING -i $NET_INTERFACE -d ! $ZIPROXY_HOST -p tcp --dport 80 -j REDIRECT --to-port $ZIPROXY_PORT


ЧаВо/Известные ошибки
Настройка MSIE для работы с ziproxy
Для настройки IE на получение сжатых данных следует перейти Internet Options  -> Advanced («Свойства обозревателя» -> «Дополнительно») и активировать параметр «Use HTTP/1.1 extensions when using proxy» («Использовать HTTP 1.1 через прокси-соединения»)

Как и почему ziproxy изменяет HTML
Устаревшее — большинство браузеров определяют тип изображения из заголовка Content-type. Это все еще нужно для работы в режиме JPEG2000 — см. JPEG2000.txt.

Когда браузер выводит изображение на экран, он смотрит на расширение в названии. Когда ziproxy изменяет тип изображения с GIF/PNG на JPEG, он не изменяет дополнительно расширение и тогда браузер определяет изображение как поврежденное.
Поэтому ziproxy предварительно изменяет расширение всех изображений в HTML. Когда вы сохраняете изображение со страницы, вам надо переименовать  его обратно в .gif/.png/.jpg, в зависимости от настоящего типа изображения. На un*x-системах можно воспользоваться утилитой «file». Если вы сохранили HTML-страницу с изображениями, проверьте, сохранил ли браузер изображения с корректными расширениями (большинство браузеров так и делает). Если нет, временно выключите использование прокси, обновите страницу и сохраните ее.

У некоторых изображений неверно передается фон.
Некоторые прозрачные GIF/PNG отображаются с неверным фоном.  Это происходит по причине того, что JPEG не хранит информацию о прозрачности и информация о цвете фона в HTML - «отсутствует». Эта ошибка находится в списке того, что надо сделать, но это очень большой пласт изменений.


Старым версиям WWWOffle не нравится gzip-сжатие.
Использование gzip-сжатия (не ssh) вызывает ошибку в wwwoffle  - страницы распаковываются некоректно. Обновитесь до wwwoffle 2.7g или более новой.

Ziproxy запущен, но я не могу авторизоваться/запустить другие программы на удаленном хосте!

Для каждого HTTP-запроса, запускается новый процесс ziproxy. В случае интенсивного параллельного скачивания/зеркалирования (например wwwoffle -fetch или использование httrack), число процессов может временно достигать максимально разрешенного пользователю администратором. Для предотвращения проблемы, установите ограничение для Ziproxy, используя команду limit (csh) или ulimit (bash).

===
Перевод: vadim s. sabinich 25.11.08 22:55:52.


