Использование прокси-сервера с пакетными менеджерами, такими как npm, pip и Composer, позволяет маршрутизировать сетевой трафик через промежуточный сервер, что необходимо для доступа к репозиториям из-за фаерволов, для обхода географических ограничений или для централизованного контроля исходящих соединений.
Прокси-серверы играют ключевую роль в корпоративных средах и при разработке, обеспечивая контролируемый доступ к внешним ресурсам. Для пакетных менеджеров это означает возможность загрузки зависимостей и пакетов даже при строгих сетевых политиках. Настройка прокси для npm, pip и Composer включает использование переменных окружения, специфичных для каждого менеджера конфигурационных файлов или параметров командной строки.
Общие принципы настройки прокси
Большинство приложений, включая пакетные менеджеры, могут использовать стандартные переменные окружения для настройки прокси. Эти переменные являются универсальным методом и часто переопределяются специфическими настройками самого пакетного менеджера.
Переменные окружения для прокси
HTTP_PROXYилиhttp_proxy: Используется для HTTP-трафика.HTTPS_PROXYилиhttps_proxy: Используется для HTTPS-трафика.ALL_PROXYилиall_proxy: Может использоваться как универсальная переменная, если специфические HTTP/HTTPS переменные не заданы.NO_PROXYилиno_proxy: Определяет список хостов, к которым следует подключаться напрямую, минуя прокси. Значения разделяются запятыми и могут включать IP-адреса, доменные имена и CIDR-блоки. Пример:localhost,127.0.0.1,.example.com,192.168.0.0/24.
Формат для значений прокси: http://[пользователь:пароль@]хост:порт/ или https://[пользователь:пароль@]хост:порт/.
Пример установки переменных окружения (Linux/macOS):
export HTTP_PROXY="http://user:password@proxy.example.com:8080"
export HTTPS_PROXY="http://user:password@proxy.example.com:8080"
export NO_PROXY="localhost,127.0.0.1,.internal.com"
Пример установки переменных окружения (Windows CMD):
set HTTP_PROXY=http://user:password@proxy.example.com:8080
set HTTPS_PROXY=http://user:password@proxy.example.com:8080
set NO_PROXY=localhost,127.0.0.1,.internal.com
Пример установки переменных окружения (Windows PowerShell):
$env:HTTP_PROXY="http://user:password@proxy.example.com:8080"
$env:HTTPS_PROXY="http://user:password@proxy.example.com:8080"
$env:NO_PROXY="localhost,127.0.0.1,.internal.com"
Использование прокси с npm
npm (Node Package Manager) является стандартным пакетным менеджером для Node.js. Он поддерживает настройку прокси как через переменные окружения, так и через свои собственные конфигурационные параметры.
Конфигурация через npm config
npm имеет собственные команды для настройки прокси, которые сохраняют параметры в файле .npmrc (глобально или локально в проекте). Эти настройки имеют приоритет над переменными окружения.
- Установка HTTP-прокси:
bash npm config set proxy http://user:password@proxy.example.com:8080 - Установка HTTPS-прокси:
bash npm config set https-proxy http://user:password@proxy.example.com:8080
Важно: даже для HTTPS-трафика часто используется HTTP-прокси (CONNECT-метод). - Удаление настроек прокси:
bash npm config delete proxy npm config delete https-proxy - Просмотр текущих настроек:
bash npm config get proxy npm config get https-proxy - Отключение проверки SSL-сертификатов (не рекомендуется для продакшена):
bash npm config set strict-ssl false
Это может быть необходимо, если корпоративный прокси перехватывает и перешифровывает SSL-трафик с использованием собственного корневого сертификата, который не установлен в системе. Более безопасный подход — установить корпоративный CA-сертификат.
Приоритет настроек npm
- Параметры командной строки (например,
npm install --proxy ...). - Переменные окружения (
HTTP_PROXY,HTTPS_PROXY). - Настройки в файле
.npmrc(локальный, затем пользовательский, затем глобальный).
Использование прокси с pip
pip является стандартным пакетным менеджером для Python. Он поддерживает настройку прокси через переменные окружения, параметры командной строки или конфигурационный файл pip.ini (Windows) / pip.conf (Linux/macOS).
Конфигурация через параметры командной строки
Для однократного использования прокси можно указать его непосредственно в команде pip:
pip install some-package --proxy http://user:password@proxy.example.com:8080
Конфигурация через переменные окружения
pip уважает стандартные переменные окружения HTTP_PROXY, HTTPS_PROXY, NO_PROXY. Это предпочтительный метод для системной настройки.
Конфигурация через конфигурационный файл
pip позволяет настроить прокси в своем конфигурационном файле.
- Местоположение файла:
- Linux/macOS:
~/.config/pip/pip.confили~/.pip/pip.conf - Windows:
%APPDATA%\pip\pip.iniили%HOME%\pip\pip.ini
- Linux/macOS:
- Пример содержимого
pip.conf/pip.ini:
ini [global] proxy = http://user:password@proxy.example.com:8080 cert = /path/to/custom/ca.pem # Для корпоративных сертификатов trusted-host = pypi.org trusted-host = files.pythonhosted.org - Отключение проверки SSL-сертификатов (не рекомендуется):
ini [global] cert = false
Или через командную строку:pip install some-package --trusted-host pypi.org --trusted-host files.pythonhosted.org.
Приоритет настроек pip
- Параметры командной строки (
--proxy). - Переменные окружения (
HTTP_PROXY,HTTPS_PROXY). - Настройки в конфигурационном файле (
pip.conf/pip.ini).
Использование прокси с Composer
Composer является пакетным менеджером для PHP. Он также поддерживает настройку прокси через переменные окружения и специфические настройки в файле composer.json или глобальном файле конфигурации.
Конфигурация через переменные окружения
Composer уважает переменные окружения HTTP_PROXY, HTTPS_PROXY, NO_PROXY. Это наиболее распространенный и рекомендуемый способ настройки прокси для Composer.
Конфигурация через Composer config
Composer позволяет устанавливать глобальные настройки, которые хранятся в файле config.json в домашней директории пользователя (~/.composer/config.json). Эти настройки могут включать параметры прокси.
- Установка HTTP-прокси:
bash composer config --global http-proxy http://user:password@proxy.example.com:8080 - Установка HTTPS-прокси:
bash composer config --global https-proxy http://user:password@proxy.example.com:8080 - Отключение проверки SSL-сертификатов (не рекомендуется):
bash composer config --global disable-tls true
Это эквивалентно установкеdisable-tlsвtrueвconfig.json. - Просмотр текущих настроек:
bash composer config --list --global
Пример ~/.composer/config.json
{
"config": {
"http-proxy": "http://user:password@proxy.example.com:8080",
"https-proxy": "http://user:password@proxy.example.com:8080",
"disable-tls": false,
"cafile": "/path/to/custom/ca.pem"
}
}
Приоритет настроек Composer
- Переменные окружения (
HTTP_PROXY,HTTPS_PROXY). - Настройки в
composer.json(локальный, затем глобальный).
Сравнение методов настройки прокси
| Функция/Менеджер | npm | pip | Composer |
|---|---|---|---|
| Переменные окружения | HTTP_PROXY, HTTPS_PROXY, NO_PROXY |
HTTP_PROXY, HTTPS_PROXY, NO_PROXY |
HTTP_PROXY, HTTPS_PROXY, NO_PROXY |
| Командная строка | npm config set proxy ... |
pip install --proxy ... |
Нет прямого параметра --proxy |
| Конфигурационный файл | .npmrc |
pip.ini / pip.conf |
composer.json (глобальный/локальный) |
| Параметры прокси в файле | proxy, https-proxy |
proxy (в секции [global]) |
http-proxy, https-proxy (в config) |
| Аутентификация | user:password@host:port |
user:password@host:port |
user:password@host:port |
| Отключение SSL-проверки | npm config set strict-ssl false |
cert = false или --trusted-host |
composer config --global disable-tls true |
Рекомендации и устранение неисправностей
- Проверка доступности прокси: Убедитесь, что прокси-сервер доступен и работает. Используйте утилиты вроде
curlилиwgetс теми же настройками прокси для проверки.
bash curl -x http://user:password@proxy.example.com:8080 https://registry.npmjs.org/ - Проверка учетных данных: Убедитесь, что имя пользователя и пароль для прокси-сервера указаны корректно.
- Проблемы с SSL/TLS:
- Если прокси перехватывает SSL-трафик (Man-in-the-Middle), пакетный менеджер может выдавать ошибки SSL-сертификатов.
- Лучшее решение — установить корневой сертификат вашего корпоративного центра сертификации в системное хранилище или указать путь к нему в конфигурации пакетного менеджера (например,
npm config set cafile /path/to/ca.pem,cert = /path/to/ca.pemдля pip,cafileдля Composer). - Отключение проверки SSL (
strict-ssl false,cert = false,disable-tls true) должно использоваться только как временное решение в контролируемой среде, так как это снижает безопасность.
- Переменная
NO_PROXY: Убедитесь, что хосты, к которым вы хотите подключаться напрямую (например, локальные репозитории или зеркала), правильно включены в списокNO_PROXY. - Приоритет настроек: Помните о приоритете настроек (командная строка > переменные окружения > конфигурационные файлы). Если прокси не работает, проверьте, не переопределяется ли он другой настройкой.
- Firewall: Убедитесь, что ваш локальный фаервол или фаервол на сервере не блокирует исходящие соединения на порт прокси-сервера.
Использование прокси с пакетными менеджерами требует внимательной настройки, особенно в корпоративных сетях с жесткими политиками безопасности и перехватом SSL-трафика. Правильная конфигурация обеспечивает бесперебойную работу с зависимостями и доступ к внешним репозиториям.