- Переменные
http_proxy
,https_proxy
иno_proxy
в Composer - Использование
- Синтаксис
- HTTPS-прокси-серверы
- Обход прокси для определенных доменов
- Устаревшие переменные среды
Переменные http_proxy
, https_proxy
и no_proxy
в Composer
Composer, как и многие другие инструменты, использует переменные среды для управления использованием прокси-сервера и поддерживает:
http_proxy
— прокси для HTTP-запросовhttps_proxy
— прокси для HTTPS-запросовCGI_HTTP_PROXY
— прокси для HTTP-запросов в контексте, отличном от CLIno_proxy
— домены, не требующие прокси
Эти названия переменных — это скорее общепринятая практика, а не официальный стандарт. В разных операционных системах и программах они могут работать по-разному. Composer в основном использует строчные буквы (например, http_proxy
), но понимает и заглавные (HTTP_PROXY
), если это нужно.
Использование
Composer требует определенных переменных среды для HTTP- и HTTPS-запросов. Например:
http_proxy=http://proxy.com:80
https_proxy=http://proxy.com:80
Можно также использовать заглавные буквы в именах.
Использование вне командной строки
Когда Composer запускается не из командной строки (например, внутри CMS или другого приложения), он не учитывает переменные http_proxy
и HTTP_PROXY
. В таких случаях нужно использовать специальную переменную CGI_HTTP_PROXY
для HTTP-запросов.
CGI_HTTP_PROXY=http://proxy.com:80
https_proxy=http://proxy.com:80
# cgi_http_proxy can also be used
Важно:
Переменная CGI_HTTP_PROXY появилась ещё в 2001 году в Perl для защиты от уязвимостей, связанных с подменой HTTP-заголовков. Широкую известность она получила в 2016 году после публикации уязвимости HTTPoxy.
Синтаксис
Используйте формат scheme://хост:порт
, как в приведённых выше примерах. Хотя отсутствующая схема по умолчанию принимается как http
, а отсутствующий порт по умолчанию становится 80
/443
для схем http
/https
, другие инструменты могут требовать явного указания этих значений.
Хост может быть указан как:
- IPv4-адрес в точечно-десятичной нотации
- IPv6-адрес в квадратных скобках
Авторизация
Composer поддерживает Basic-авторизацию, используя синтаксис: scheme://user:pass@host:port
Важные требования:
- Специальные символы URL в логине или пароле обязательно должны быть закодированы через percent-encoding
- Логин и пароль кодируются
отдельно
, затем объединяются через двоеточие - Логин
не может
содержать двоеточие (даже в закодированном виде), так как прокси-сервер разделяет компоненты по первому встреченному двоеточию
Пример корректного использования:
user: me@company
pass: p@ssw$rd
proxy: http://proxy.com:80
# percent-encoded authorization
me%40company:p%40ssw%24rd
scheme://me%40company:p%40ssw%24rd@proxy.com:80
Техническое пояснение:
- Percent-encoding преобразует спецсимволы в формат
%XX
(например,@
→%40
) - Двоеточие (
:
) является разделителем и не может быть частью логина - Это ограничение связано с алгоритмом разбора строки прокси-сервером
HTTPS-прокси-серверы
Composer поддерживает HTTPS-прокси-серверы, где HTTPS — это схема, используемая для подключения к прокси, но только с PHP 7.3 с версией curl 7.52.0 и выше.
http_proxy=https://proxy.com:443
https_proxy=https://proxy.com:443
Обход прокси для определенных доменов
Используйте переменную среды no_proxy
(или NO_PROXY
), чтобы задать разделенный запятыми список доменов, для которых не следует использовать прокси.
no_proxy=example.com
# Обходит прокси-сервер для example.com и его поддоменов
no_proxy=www.example.com
# Обходит прокси для www.example.com и его поддоменов, но не для example.com
Домен может быть ограничен определенным портом (например, :80
), а также может быть указан как IP-адрес или блок IP-адресов в нотации CIDR.
Адреса IPv6 не обязательно заключать в квадратные скобки, как для значений http_proxy
/https_proxy
, хотя этот формат принимается.
Установка значения *
обойдет прокси-сервер для всех запросов.
Примечание:
Начальная точка в имени домена не имеет значения и удаляется перед обработкой.
Устаревшие переменные среды
Composer изначально предоставлял HTTP_PROXY_REQUEST_FULLURI
и HTTPS_PROXY_REQUEST_FULLURI
для смягчения проблем с некорректно работающими прокси. Они больше не требуются и не используются.
Перевод с английского официальной документации Composer:
https://getcomposer.org/doc/faqs/how-to-use-composer-behind-a-proxy.md