Автоматична настройка проксі

Формат файлу автонастройки проксі в Navigator'е

(В кінці документа наводяться кілька прикладів і порад.)

яка буде викликатися Navigator-му для кожного URL, який він збирається завантажити, в такий спосіб:

url - повний URL, до якого потрібно отримати доступ.
host - ім'я хоста, яке витягується з URL. Це зроблено тільки для зручності, це просто рядок між «: //» і першим символом «. »Або« / »після неї. Номер порту в неї не включається, його можна витягти при необхідності.
ret - (значення, що повертається) рядок конфігурації проксі. Формат рядка описаний нижче.

Збереження файлу автонастройки і настройка MIME-типу

Примітка 2: Приклади в кінці цього документа готові до роботи. Щоб їх використовувати, в них не потрібно вносити ніяких синтаксичних змін (але звичайно, потрібно відредагувати скрипт так, щоб в ньому згадувалися ваші домени і / або підмережі).

Далі необхідно конфігурувати ваш сервер так, щоб розширення .pac відповідав наступний MIME-тип:

Якщо використовується сервер Netscape, потрібно відредагувати файл mime.types в каталозі config. Якщо використовуються сервери Apache, CERN або NCSA, потрібно використовувати директиву AddType.

Формат повертається рядка

Якщо рядок - null. проксі використовуватися не буде.

Рядок може містити довільне число блоків, розділених крапкою з комою:

DIRECT - з'єднання потрібно встановлювати безпосередньо, без проксі.
PROXY host: port - використовувати вказаний проксі.
SOCKS host: port - використовувати вказаний SOCKS-сервер.

Якщо вказано кілька налаштувань, буде використана найлівіша, поки Navigator може встановити з'єднання з проксі. У разі недоступності цього проксі буде використано таке значення і т.д.

Navigator буде автоматично пробувати з'єднатися з недоступним проксі через спочатку 30 хвилин, потім через 1 годину після попередньої спроби (кожен раз додаючи додаткові 30 хвилин).

Якщо все проксі недоступні, а опція DIRECT не вказана, Navigator запросить користувача ігнорувати чи настройки проксі і попитатется використовувати пряме з'єднання. Через 20 хвилин Navigator запросить про необхідність оновлення налаштувань проксі (потім через 40 хвилин після попереднього запиту, додаючи кожен раз 20 хвилин).

PROXY w3proxy.netscape.com:8080; PROXY mozilla.netscape.com:8081

Первинний проксі - w3proxy: 8080; якщо він стає недоступним, використовувати mozilla: 8081 поки первинний знову не стане доступним.

PROXY w3proxy.netscape.com:8080; PROXY mozilla.netscape.com:8081; DIRECT

Те ж, що і вище, але якщо обидва проксі недоступні, автоматично почати використовувати пряме з'єднання. (В попередньому прикладі Netscape запросить підтвердження користувача на використання прямого з'єднання; тут застосування третього способу з'єднання не зажадає втручання користувача.)

PROXY w3proxy.netscape.com:8080; SOCKS socks: 1080

Використовувати SOCKS, якщо первинний проксі не доступний.

host - ім'я хоста в URL (без номера порту).

Істина, якщо ім'я хоста не містить доменного імені (немає точок).

isPlainHostName ( "www") - істина.
isPlainHostName ( "www.netscape.com") - брехня.

host - ім'я хоста з URL.
domain - доменне ім'я для порівняння з ім'ям хоста.

Повертає «істину», якщо ім'я домену відповідає імені хоста.

dnsDomainIs ( "www.netscape.com", ".netscape.com") - істина.
dnsDomainIs ( "www", ".netscape.com") - брехня.
dnsDomainIs ( "www.mcom.com", ".netscape.com") - брехня.

host - ім'я хоста з URL.
hostdom - повністю вказане ім'я хоста для порівняння.

«Істина», якщо ім'я хоста в точності співпадає з ім'ям або в імені хоста відсутня частина з доменним ім'ям, а незазначена частина відповідає.

localHostOrDomainIs ( "www.netscape.com", "www.netscape.com") - істина (точну відповідність).
localHostOrDomainIs ( "www", "www.netscape.com") - істина (ім'я хоста збігається, а домен не вказано).
localHostOrDomainIs ( "www.mcom.com", "www.netscape.com") - брехня (не збігається ім'я домену).
localHostOrDomainIs ( "home.netscape.com", "www.netscape.com") - брехня (не збігається ім'я хоста).

host - ім'я хоста з URL.

isInNet (host, pattern, mask)

dnsResolve ( "home.netscape.com") повертає рядок "198.95.249.79".

host - ім'я хоста з URL.

Повертає рівень (ціле число) домену (кількість точок в імені).

dnsDomainLevels ( "www") повертає 0.
dnsDomainLevels ( "www.netscape.com") повертає 2.

str - довільна рядок для перевірки відповідності (наприклад URL або ім'я хоста).
shexp - шаблон для перевірки.

Повертає «істину», якщо str відповідає shexp. Тут шаблон є вираженням в стилі оболонки (як в bash або командному рядку Windows), а не регулярним виразом.

weekdayRange (wd1, wd2, gmt)

wd1 і wd2 - рядки з назвою дня тижня, одна з: SUN MON TUE WED THU FRI SAT.
gmt - або рядок GMT. або не вказується.

Обов'язковий тільки перший параметр. І другий, і третій можуть бути опущені. Якщо вказано тільки перший параметр, функція повертає «істину» в день тижня, який представлений першим параметром. Якщо в якості другого параметра вказана рядок "GMT". час визначається по GMT, інакше використовується локальний час.

Якщо вказані обидва параметри, і wd1. і wd2. «Істина» повертається коли поточний день тижня знаходиться між цими днями включно. Якщо вказано параметр "GMT". використовується час за Гринвічем, інакше - локальне.

weekdayRange ( "MON", "FRI") - істинно з понеділка по п'ятницю (час локальне).
weekdayRange ( "MON", "FRI", "GMT") - те ж саме, але за Гринвічем (GMT).
weekdayRange ( "SAT") - істинно по суботах (час локальне).
weekdayRange ( "SAT", "GMT") - істинно по суботах (GMT).
weekdayRange ( "FRI", "MON") - істинно з п'ятниці до понеділка (увага - порядок має значення!).

dateRange (day)
dateRange (day1, day2)
dateRange (mon)
dateRange (month1, month2)
dateRange (year)
dateRange (year1, year2)
dateRange (day1, month1, day2, month2)
dateRange (month1, year1, month2, year2)
dateRange (day1, month1, year1, day2, month2, year2)
dateRange (day1, month1, year1, day2, month2, year2, gmt)

Незважаючи на те, в попередніх прикладах це не показано, параметр "GMT" може бути використаний в будь-якому з 9 видів виклику, завжди в якості останнього параметра.

timeRange (hour)
timeRange (hour1, hour2)
timeRange (hour1, min1, hour2, min2)
timeRange (hour1, min1, sec1, hour2, min2, sec2)
timeRange (hour1, min1, sec1, hour2, min2, sec2, gmt)

hour - година з 0 по 23 (0 - опівночі, 23 - 11 пополудні).
min - хвилини від 0 до 59.
sec - секунди від 0 до 59.
gmt - або рядок "GMT" для тимчасової зони GMT (за Гринвічем). Якщо не вказано, буде використовуватися локальний час. І знову, хоча це і не відображено в прикладах, цей параметр може використовуватися в будь-якому випадку, завжди останнім.

Істинно протягом (або в діапазоні) зазначеного часу.

timeRange (12) - Бог справді між полудня до 1 години пополудні.
timeRange (12, 13) - те ж саме.
timeRange (12, "GMT") - Бог справді між полудня по 1 годині дня за Гринвічем (GMT).
timeRange (9, 17) - істинно з 9 години ранку по 5 годині вечора.
timeRange (8, 30, 17, 00) - істинно з 8:30 до 17:00.
timeRange (0, 0, 0, 0, 0, 30) - Бог справді між півночі протягом 30 секунд.

Це буде працювати в домені Netscape. З'єднання з неповністю зазначеними хостами або хостами знаходяться в локальному домені буде здійснюватися безпосередньо. Все інше буде направлено через w3proxy: 8080. Якщо проксі не відповідатиме, з'єднання буде зроблено безпосередньо.

Примітка: Це найпростіший і найефективніший файл автонастройки для випадку, коли є тільки один проксі-сервер.

Приклад 1б: Те ж, що і вище, але чудова ідея для локальних серверів, які знаходяться за фаєрволом

Якщо є хости (такі як основний веб-сервер), які знаходяться в локальному домені, але за фаєрволом, і доступні тільки через проксі-сервер, то таке виключення може бути оброблено за допомогою функції localHostOrDomainIs ().

Вищенаведений код буде використовувати проксі для всього, крім хостів в домені netscape.com. і хостів www.netscape.com і merchant.netscape.com.

Зверніть увагу на порядок перерахування хостів, який впливає на ефективність: localHostOrDomainIs () буде викликана тільки для URL в локальному домені, а не для всіх. Зверніть увагу на дужки у виразі, які додані для досягнення вищезгаданої ефективності.

Цей приклад буде працювати тільки в оточенні, де внутрішній DNS налаштований так, що він може розпізнавати тільки внутрішні імена хостів, і мета такого налаштування - чудова ідея тільки для невпізнаних хостів:

Цей код вимагає звернення до DNS при кожному виклику; його можна згрупувати з іншими правилами, щоб звернення до DNS потрібно тільки тоді, коли інші правила не дадуть результату:

Приклад 3: Ухвалення рішення на основі інформації про підмережі

У цьому прикладі з'єднання з хостами в даній підмережі виробляються безпосередньо, а всі інші - через проксі.

І знову, використання звернення до DNS може бути мінімізовано шляхом додавання додаткових перевірок перед викликом isInNet ().

Приклад 4: Розподіл навантаження і перенаправлення за шаблоном URL

Цей приклад - більш складний. Є чотири (4) проксі-сервера, один з яких, резервний (hot stand-by), підміняє інших в разі їх відмови.

Крім того, три перших проксі-сервера обслуговують свої URL - у кожного своя зона, що додає ефективності кешуванню (у будь-якого завантаженого документа - тільки одна копія на одному з трьох серверів, а не на кожному з них). Навантаження розподіляється приблизно так:

Приклад 5: Налаштування проксі для конкретного протоколу

Зверніть увагу, що того ж можна домогтися, використовуючи описану раніше функцію shExpMatch (); наприклад: