В рунете мало информации об такой замечательной вещи как «Автоматическая настройка прокси сервера». В этой статье я постараюсь подробно остановиться на данном вопросе.
Суть технологии заключается в том, что браузер читает специальный файл написаный на языке JavaScript, в котором определена только одна функция:
где,
url – полный URL запрашиваемого документа
host – имя поста извлекаемое из URL. Этот параметр необходим только для удобства. Он содержит всё от :// и до первого / или :. Номер порта не включается в этот параметр.
Функция возвращает строку содержащую один или несколько способов доступа к запрашиваемому документу. Формат строки следующий:
null — если строка null, то использовать прокси сервер не нужно;
DIRECT — прямое соединение без использования прокси;
PROXY host:port — определяет какой прокси сервер необходимо использовать;
SOCKS host:port — определяет SOCKS сервер который необходимо использовать.
Строка может содержать несколько приведенных выше параметров разделенных точкой с запятой. Тогда браузер будет перебирать их по очереди пока не найдёт доступный прокси сервер.
В главной функции могут быть вызваны следующие функции:
Браузеры Firefox и Internet Explorer поддерживает только системную кодировку в PAC файле и не поддерживают Unicode кодировки, такие как UTF-8.
Приведу небольшой пример:
Данный скрип говорить устанавливать браузеру прямое соединение для локальных хостов или под доменов домена .mydomain.com. Для доменов из зоны .com используются прокси серверы 1 и 4, для доменов из зоны .edu прокси 2 и 4 ну и для всех оставшихся вариантов прокси 3 и 4.
Теперь остановлюсь на вопросе как указать браузеру использовать автоматическую конфигурацию прокси серверов. Для этого есть несколько вариантов:
Настройка браузеров. В параметрах программы нужно указать определение прокси-сервера:
Ещё несколько полезной информации можно почерпнуть по адресу en.wikipedia.org/wiki/Proxy_auto-config
Суть технологии заключается в том, что браузер читает специальный файл написаный на языке JavaScript, в котором определена только одна функция:
function FindProxyForURL(url, host)
{
...
}
где,
url – полный URL запрашиваемого документа
host – имя поста извлекаемое из URL. Этот параметр необходим только для удобства. Он содержит всё от :// и до первого / или :. Номер порта не включается в этот параметр.
Функция возвращает строку содержащую один или несколько способов доступа к запрашиваемому документу. Формат строки следующий:
null — если строка null, то использовать прокси сервер не нужно;
DIRECT — прямое соединение без использования прокси;
PROXY host:port — определяет какой прокси сервер необходимо использовать;
SOCKS host:port — определяет SOCKS сервер который необходимо использовать.
Строка может содержать несколько приведенных выше параметров разделенных точкой с запятой. Тогда браузер будет перебирать их по очереди пока не найдёт доступный прокси сервер.
В главной функции могут быть вызваны следующие функции:
- isPlainHostName(host) возвращает true если строка host не содержит точек (".").
- dnsDomainIs(host, domain) вернет true если domain принадлежит host
- localHostOrDomainIs(host, hostdomain) возвращает true если строка host (имя хоста или домена) содержится в строке hostdomain
- isResolvable(host) возвращает true если возможно определить IP адрес для заданной строки host
- isInNet(host, pattern, mask) возвращает true если IP адрес или имя хоста в строке host соответствует шаблону pattern и маске mask
- dnsResolve(host) возвращает IP адрес для заданного host
- myIpAddress() возвращает IP адрес компьютера
- dnsDomainLevels(host) возвращает количество точек в строке host. Другими словами уровень домена
- shExpMatch(str, shellexp) вернет true если строка str соответствует регулярному выражению в строке shellexp (формат регулярных выражений shellexp, а не regexp). Например shExpMatch("a/b/c","*/b/*") вернет true
- weekdayRange(wd1 [, wd2 ][, "GMT"]) вернет true если текущая дата или дата заданная в параметре GTM, соответствует заданному дню недели или диапазону дней. Дни недели записываются в закавыченной строке из следующих вариантов (SUN|MON|TUE|WED|THU|FRI|SAT)
- dateRange([day1] [,month1] [,year1] [,day2] [,month2] [,year2] [,"GMT"]) вернет true если текущая дата или дата заданная в параметре GTM попадает в указанный диапазон. Название месяца задается закавыченной строкой из следующих вариантов (JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)
- timeRange(hour1, minute1, second1, hour2, minute2, second2 [, "GMT"])
- timeRange(hour1, minute1, hour2, minute2 [, "GMT"])
- timeRange(hour1, hour2 [, "GMT"])
- timeRange(hour [, "GMT"])
Браузеры Firefox и Internet Explorer поддерживает только системную кодировку в PAC файле и не поддерживают Unicode кодировки, такие как UTF-8.
Приведу небольшой пример:
function FindProxyForURL(url, host)
{
if (isPlainHostName(host) || dnsDomainIs(host, ".mydomain.com"))
return "DIRECT";
else if (shExpMatch(host, "*.com"))
return "PROXY proxy1.mydomain.com:8080; " +
"PROXY proxy4.mydomain.com:8080";
else if (shExpMatch(host, "*.edu"))
return "PROXY proxy2.mydomain.com:8080; " +
"PROXY proxy4.mydomain.com:8080";
else
return "PROXY proxy3.mydomain.com:8080; " +
"PROXY proxy4.mydomain.com:8080";
}
Данный скрип говорить устанавливать браузеру прямое соединение для локальных хостов или под доменов домена .mydomain.com. Для доменов из зоны .com используются прокси серверы 1 и 4, для доменов из зоны .edu прокси 2 и 4 ну и для всех оставшихся вариантов прокси 3 и 4.
Теперь остановлюсь на вопросе как указать браузеру использовать автоматическую конфигурацию прокси серверов. Для этого есть несколько вариантов:
- Задать адрес скрипта вручную. Скрипт выкладывается на сервер доступный для пользователя. Обычно имя скрипта proxy.dat, однако если следовать спецификации WPAD скрипт следует назвать wpad.dat. Так же сервер должен отдавать файл с MIME типом application/x-ns-proxy-autoconfig
- Второй способ WPAD метод основанный на DNS. Подробнее можно прочесть по ссылке ru.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol
- И третий способ WPAD, основанный на DHCP. WPAD просто выдает PAC скрипт с выбранный номером 252 в «аренду» запросившему IP. Браузер получает URL скрипта и просто качает его по ссылке. Для этого необходимо:
- Добавим в /etc/dhcp/dhcpd.conf следующие строчки.
option local-pac-server code 252 = text;
option local-pac-server "wpad.example.com:80/wpad.dat\000";
- Перезапустите DHCP сервер.
- Добавим в /etc/dhcp/dhcpd.conf следующие строчки.
Настройка браузеров. В параметрах программы нужно указать определение прокси-сервера:
- В браузере Explorer
Сервис -> Свойства обозревателя -> Подключения -> Настройка сети
поставить галочку напротив опции «Автоматическое определение параметров»
или поставить галочку напротив опции «Использовать сценарий автоматической настройки» и в поле «Адрес» написать путь до PAC файла. Например: wpad.example.com:80/wpad.dat - В браузере Opera
Настройки -> Дополнительно -> Сеть -> Прокси-серверы
поставить галочку напротив опции «Автоматическая конфигурация прокси-сервера» и в поле «Адрес» написать путь до PAC файла. - В браузере Firefox
Инструменты->Настройки->Дополнительно->Сеть->Соединение(Настроить)
выберать опции «Автоматически определять настройки прокси для этой сети»
или выберать опцию «URL автоматической настройки сервиса прокси» и в поле «Адрес» написать путь до PAC файла.
Ещё несколько полезной информации можно почерпнуть по адресу en.wikipedia.org/wiki/Proxy_auto-config