Совместимость NO_PROXY в curl, .NET и контейнерах
Превратите общую политику прямого маршрутизирования в конфигурацию для конкретного клиента, используя небольшой набор представительных адресатов.
Команда помещает одну строку обхода в общий файл окружения. curl идёт напрямую, другое приложение использует прокси, а контейнер ведёт себя уже иначе. Общий файл распространил одни и те же символы. Он не распространил один общий синтаксический анализатор.
Устойчивый объект — это политика: какие адресаты должны быть прямыми и при каких условиях? Держите её отдельно от строки, которая нужна каждой программе.
Сначала запишите ожидаемые маршруты
Используйте представительные адреса, включая граничные случаи, а не только простые успехи:
| Форма адресата | Вопрос владельцу политики |
|---|---|
| Родительский домен | Его нужно обходить или только его дочерние домены? |
| Поддомен | Наследует ли он тот же маршрут? |
| Буквальный частный IP | Доступен ли этот адрес напрямую из данного клиента? |
| Тот же сервис под именем хоста | Должны ли запросы по имени и по адресу совпадать? |
| Другой порт сервиса | Исключение охватывает хост или один прослушиватель? |
Затем определите потребителей: демон, скачивающий образ, программа внутри контейнера, языковая HTTP-библиотека и интерактивный браузер могут быть отдельными записями. Конфигурация прокси клиента Docker может заполнить значения окружения контейнера, не заставляя каждого клиента внутри реализовывать одни и те же правила сопоставления.
Переводите, а не копируйте слепо
Один документированный пример реального различия — граница родительского домена. Исключение домена в curl охватывает указанный домен и совпадающие дочерние. Политика окружения .NET различает голое имя и форму поддомена с ведущей точкой. Универсальное правило «всегда добавлять ведущую точку» не может надёжно выразить обе политики.
Поддержка диапазонов IP также зависит от потребителя и его версии. Машина с новым отдельным curl всё ещё может запускать приложение, слинкованное со старой libcurl, или клиент, использующий совсем другую библиотеку. Релиз операционной системы — не полная опись клиентов.
Для каждого потребителя запишите поддерживаемый интерфейс конфигурации и минимальное выражение предполагаемых маршрутов. Короткий явный список хостов может быть лучше хитрого шаблона, смысл которого никто не может объяснить.
Держите доказательства конфигурации отдельно от доказательств соединения
Разобранная настройка или API решения о маршруте может показать, что выбрала программа. Исход запроса затем показывает, был ли этот маршрут пригоден. В .NET HttpClient.DefaultProxy.IsBypassed даёт такую проверку со стороны конфигурации, когда используется политика прокси по умолчанию. Не диагностируйте недоступный прямой сервис как сбой анализатора обхода только потому, что запрос завершился по тайм-ауту.
Сохраняйте граничные адресаты при обновлении клиента или базового образа. Они делают будущие изменения совместимости видимыми, не требуя, чтобы вся команда заново выясняла, почему в файле две похожие записи домена.