Как настроить прокси для Composer: http_proxy, https_proxy, no_proxy
Настройка http_proxy и https_proxy для Composer — подробный разбор

Composer: работа с прокси-серверами и переменными окружения



Переменные http_proxy, https_proxy и no_proxy в Composer

Composer, как и многие другие инструменты, использует переменные среды для управления использованием прокси-сервера и поддерживает:

  • http_proxy — прокси для HTTP-запросов
  • https_proxy — прокси для HTTPS-запросов
  • CGI_HTTP_PROXY — прокси для HTTP-запросов в контексте, отличном от CLI
  • no_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

Важные требования:

  1. Специальные символы URL в логине или пароле обязательно должны быть закодированы через percent-encoding
  2. Логин и пароль кодируются отдельно, затем объединяются через двоеточие
  3. Логин не может содержать двоеточие (даже в закодированном виде), так как прокси-сервер разделяет компоненты по первому встреченному двоеточию

Пример корректного использования:

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

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню