Я погоджуюся з твердженням БілТхора, що це скоріше конвенція, ніж стандарт.
Я не знаю походження цих змінних, але у випадку HTTP на * nix багато конвенцій, схоже, походять від поведінки бібліотеки HTTP libcurl та програми командного рядка curl.
На https://curl.haxx.se/docs/manual.html є опис змінних середовища, пов’язаних із використанням проксі HTTP, який розуміє libcurl / curl:
ЗМІН З ЕКОЛОГІЇ
Curl читає та розуміє такі змінні середовища:
http_proxy, HTTPS_PROXY, FTP_PROXY
Вони повинні бути встановлені для проксі-серверів. Загальний проксі повинен бути встановлений з
ALL_PROXY
Список імен хостів, розділених комами, не повинен проходити через будь-який проксі, встановлений (лише зірочка, '*' відповідає всім хостам)
NO_PROXY
Якщо ім'я хоста відповідає одному з цих рядків або хост знаходиться в домені однієї з цих рядків, транзакції з цим вузлом не будуть проксі.
Зауважте, що http_proxy
серед цих змінних написано малі регістри як єдині. Деякі бібліотеки / програми шукають малі імена цих змінних, тоді як інші шукають великі імена. Для безпечності слід визначити як малі, так і великі версії кожної змінної.
Інша проблема полягає в тому, що цитований опис того, як узгоджуються імена хостів, не NO_PROXY
є точним і не дає відповіді на наступні питання:
- Чи повинні значення мають бути повністю кваліфікованими доменними іменами (FQDN), таким чином закінчуючи крапкою на кшталт
foo.example.com.
чи ні?
- Чи повинен
foo.example.com
відповідати лише цей один домен чи він також повинен відповідати будь-якому субдомену, як bar.foo.example.com
? Якщо останній, тоді він також повинен відповідати будь-якому піддомену в будь-якому субдомені, як bar.baz.foo.example.com
?
- Чи
.foo.example.com
дозволено (крапка на початку), і якщо так, то що вона повинна відповідати?
- Чи
*
допускається зірочка ( ) як частина значення ( *.example.com
, *example.com
) і якщо так, то як вона поводиться?
Відсутність формальної специфікації призводить до плутанини та помилок. Тут слід згадати бібліотеку libproxy, яка має на меті забезпечити правильну та послідовну підтримку конфігурації проксі. З домашньої сторінки проекту :
libproxy існує, щоб відповісти на запитання: З огляду на мережевий ресурс, як до нього дійти? Він обробляє всі деталі, що дозволяє повернутися до програмування.
Подальше читання: