Um einen Proxy mit Paketmanagern wie npm, pip und Composer zu verwenden, konfigurieren Sie die Proxy-Einstellungen entweder über Umgebungsvariablen (HTTP_PROXY, HTTPS_PROXY), Befehlszeilenargumente oder spezifische Konfigurationsdateien, die für jeden Paketmanager einzigartig sind.
Viele Entwicklungsumgebungen arbeiten hinter Unternehmensfirewalls oder erfordern eine Verkehrsüberwachung, was die Verwendung eines HTTP- oder HTTPS-Proxyservers für ausgehende Verbindungen notwendig macht. Paketmanager, die Abhängigkeiten von externen Registries herunterladen, müssen so konfiguriert werden, dass sie ihre Netzwerkanfragen über solche Proxys leiten, um korrekt zu funktionieren.
Allgemeine Konzepte der Proxy-Konfiguration
Proxyserver können HTTP- und HTTPS-Verkehr abfangen und weiterleiten. Für den Zugriff auf diese Proxys ist oft eine Authentifizierung erforderlich.
Format der Proxy-URL
Das Standardformat für eine Proxy-URL, einschließlich optionaler Authentifizierung, ist:
protocol://[user:password@]host:port
protocol:httpoderhttpsuser:password: Optionale Anmeldeinformationen für die Proxy-Authentifizierung.host: Der Hostname oder die IP-Adresse des Proxyservers.port: Der Port, auf dem der Proxyserver lauscht (z.B. 8080, 3128).
Beispiel: http://user:password@proxy.example.com:8080
Umgebungsvariablen
Die gängigste und oft universell anerkannte Methode zur Konfiguration von Proxys über verschiedene Tools hinweg, einschließlich Paketmanagern, ist die Verwendung von Standard-Umgebungsvariablen.
HTTP_PROXYoderhttp_proxy: Gibt den Proxyserver für HTTP-Anfragen an.HTTPS_PROXYoderhttps_proxy: Gibt den Proxyserver für HTTPS-Anfragen an.NO_PROXYoderno_proxy: Eine durch Kommas getrennte Liste von Hostnamen, Domains oder IP-Adressen, die den Proxy umgehen sollen. Dies ist entscheidend für den direkten Zugriff auf interne Ressourcen oder lokale Entwicklungsserver.
Diese Variablen sind unter Windows typischerweise nicht zwischen Groß- und Kleinschreibung zu unterscheiden, auf Unix-ähnlichen Systemen jedoch schon. Es ist gängige Praxis, sowohl UPPER_CASE- als auch lower_case-Versionen für maximale Kompatibilität festzulegen.
# Beispiel für Unix-ähnliche Systeme (Linux, macOS)
export HTTP_PROXY="http://user:password@proxy.example.com:8080"
export HTTPS_PROXY="http://user:password@proxy.example.com:8080" # Oft dasselbe wie HTTP_PROXY
export NO_PROXY="localhost,127.0.0.1,.internal.domain.com"
# Für Windows-Eingabeaufforderung
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.domain.com
# Für 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.domain.com"
npm (Node Package Manager)
npm kann über sein integriertes Konfigurationssystem oder über Umgebungsvariablen konfiguriert werden.
Konfiguration über npm config
Die bevorzugte Methode für npm ist, Proxy-Einstellungen direkt in seiner Konfiguration festzulegen. Dies speichert die Einstellungen dauerhaft.
# HTTP-Proxy festlegen
npm config set proxy http://user:password@proxy.example.com:8080
# HTTPS-Proxy festlegen (oft dasselbe wie HTTP-Proxy)
npm config set https-proxy http://user:password@proxy.example.com:8080
# Einen Proxy aufheben
npm config rm proxy
npm config rm https-proxy
# Einstellungen überprüfen
npm config get proxy
npm config get https-proxy
Wenn Ihr Proxy keine Authentifizierung erfordert, lassen Sie das Segment user:password@ weg.
SSL-Zertifikatsprobleme
Bei der Verwendung eines HTTPS-Proxys oder einer HTTPS-Registry über einen HTTP-Proxy kann npm auf Probleme bei der SSL-Zertifikatsüberprüfung stoßen. Dies kann auftreten, wenn der Proxy den HTTPS-Verkehr mit seinem eigenen Zertifikat abfängt und neu verschlüsselt, welches von Ihrem System nicht vertraut wird.
Um dies zu beheben, können Sie:
1. Das CA-Zertifikat des Proxys zum Vertrauensspeicher Ihres Systems hinzufügen. Dies ist der empfohlene sichere Ansatz.
2. npm anweisen, eine bestimmte CA-Zertifikatsdatei zu verwenden:
bash
npm config set cafile /path/to/proxy/ca-certificate.pem
3. Die strikte SSL-Überprüfung deaktivieren (nicht für die Produktion empfohlen):
bash
npm config set strict-ssl false
Dies umgeht die Zertifikatsvalidierung und kann Sie Man-in-the-Middle-Angriffen aussetzen. Nur für temporäres Debugging in kontrollierten Umgebungen verwenden.
Registry-Konfiguration
Wenn Ihre Organisation eine private npm-Registry (z.B. Nexus, Artifactory) verwendet, die direkt oder über einen anderen Proxy zugänglich ist, stellen Sie sicher, dass die registry-Einstellung korrekt ist.
npm config set registry https://my-private-registry.example.com/npm/
pip (Python Package Installer)
pip unterstützt die Proxy-Konfiguration über Befehlszeilen-Flags, Umgebungsvariablen oder eine Konfigurationsdatei.
Befehlszeilen-Flag
Für einen einzelnen pip-Befehl verwenden Sie das --proxy-Flag:
pip install some-package --proxy http://user:password@proxy.example.com:8080
Konfigurationsdatei
Für dauerhafte Proxy-Einstellungen ändern oder erstellen Sie die pip-Konfigurationsdatei.
* Linux/macOS: ~/.config/pip/pip.conf oder ~/.pip/pip.conf
* Windows: %APPDATA%\pip\pip.ini oder %HOME%\pip\pip.ini
Fügen Sie Folgendes zum Abschnitt [global] hinzu:
# ~/.config/pip/pip.conf oder %APPDATA%\pip\pip.ini
[global]
proxy = http://user:password@proxy.example.com:8080
Umgebungsvariablen
pip respektiert die Standard-Umgebungsvariablen HTTP_PROXY, HTTPS_PROXY und NO_PROXY. Wenn diese gesetzt sind, werden sie automatisch verwendet.
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.domain.com"
pip install some-package
SSL-Zertifikatsprobleme
Ähnlich wie npm kann pip auf SSL-Fehler stoßen.
1. CA-Zertifikat des Proxys zum System-Vertrauensspeicher hinzufügen.
2. Einen vertrauenswürdigen Host für den Index angeben:
ini
# ~/.config/pip/pip.conf oder %APPDATA%\pip\pip.ini
[global]
trusted-host = pypi.org
Dies weist pip an, dem angegebenen Host zu vertrauen, auch wenn die SSL-Validierung für ihn fehlschlägt. Mit Vorsicht verwenden.
3. Ein benutzerdefiniertes CA-Bundle angeben:
ini
# ~/.config/pip/pip.conf oder %APPDATA%\pip\pip.ini
[global]
cert = /path/to/proxy/ca-bundle.pem
Oder über die Befehlszeile: pip install some-package --cert /path/to/proxy/ca-bundle.pem
Private Paket-Indizes
Wenn Sie einen privaten Python-Paketindex (z.B. Artifactory, Nexus) verwenden, konfigurieren Sie die index-url oder extra-index-url:
# ~/.config/pip/pip.conf oder %APPDATA%\pip\pip.ini
[global]
index-url = https://my-private-pypi.example.com/simple/
Composer (PHP Dependency Manager)
Composer verlässt sich stark auf Umgebungsvariablen für die Proxy-Konfiguration und benötigt möglicherweise auch die Proxy-Einstellungen von Git für über Git abgerufene Repositories.
Umgebungsvariablen
Composer verwendet hauptsächlich die Standard-Umgebungsvariablen HTTP_PROXY, HTTPS_PROXY und NO_PROXY.
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.domain.com"
composer install
Composer-Konfiguration (config.json)
Obwohl Composer keine direkte proxy-Einstellung in seiner config.json für allgemeinen HTTP/HTTPS-Verkehr hat, ist es möglich, Proxy-Einstellungen für spezifische VCS-Repositories zu konfigurieren, wenn diese nicht von Umgebungsvariablen übernommen werden oder wenn verschiedene Proxys benötigt werden.
Zum Beispiel, um einen Proxy für Git zu konfigurieren:
{
"config": {
"github-oauth": {
"github.com": "YOUR_OAUTH_TOKEN"
}
}
}
Dies ist keine direkte Proxy-Einstellung, zeigt aber, wo andere netzwerkbezogene Konfigurationen platziert werden könnten. Für die tatsächliche Git-Proxy-Nutzung siehe den nächsten Abschnitt.
Git-Proxy-Konfiguration
Composer ruft Pakete oft direkt von Git-Repositories (z.B. GitHub, GitLab) ab. Wenn Ihr Git-Verkehr über einen Proxy laufen muss, müssen Sie Git selbst konfigurieren.
# HTTP-Proxy für Git festlegen
git config --global http.proxy http://user:password@proxy.example.com:8080
# HTTPS-Proxy für Git festlegen
git config --global https.proxy http://user:password@proxy.example.com:8080
# Aufheben
git config --global --unset http.proxy
git config --global --unset https.proxy
# Überprüfen
git config --global --get http.proxy
git config --global --get https.proxy
Dies ist besonders wichtig, wenn Ihre composer.json vcs-Repositories oder direkte Git-URLs verwendet.
SSL-Zertifikatsprobleme
Composer kann, wie andere Tools, SSL-Probleme haben.
1. CA-Zertifikat des Proxys zum System-Vertrauensspeicher hinzufügen.
2. Git konfigurieren, um die SSL-Überprüfung zu deaktivieren (nicht empfohlen):
bash
git config --global http.sslVerify false
Dies sollte ein letzter Ausweg sein und mit äußerster Vorsicht verwendet werden.
Behebung häufiger Proxy-Probleme
- Falsche Proxy-Adresse/Port: Überprüfen Sie den Hostnamen, die IP-Adresse und den Port. Ein häufiger Fehler ist die Verwendung von HTTP für einen HTTPS-Proxy oder umgekehrt.
- Authentifizierungsfehler: Stellen Sie sicher, dass Benutzername und Passwort in der Proxy-URL korrekt und URL-kodiert sind, falls sie Sonderzeichen enthalten.
- SSL-Zertifikatsfehler: Wenn Sie
SSL_ERROR_SYSCALL,certificate verify failedoder ähnliche Fehler erhalten, führt Ihr Proxy möglicherweise eine SSL-Abfangung durch. Installieren Sie das Root-CA-Zertifikat des Proxys in den Vertrauensspeicher Ihres Systems oder konfigurieren Sie den Paketmanager so, dass er einem bestimmten CA-Bundle vertraut (wie oben beschrieben). NO_PROXY-Probleme: Wenn interne Dienste immer noch versuchen, über den Proxy zu gehen, überprüfen Sie, ob IhreNO_PROXY-Einstellung korrekt und umfassend ist. Stellen Sie sicher, dass sielocalhost,127.0.0.1und alle relevanten internen Domain-Suffixe enthält.- Firewall-Blockierung: Bestätigen Sie, dass die Firewall oder die Netzwerksicherheitsgruppen Ihres Computers ausgehende Verbindungen zur IP und zum Port des Proxyservers zulassen.
- Gemischte HTTP/HTTPS-Konfiguration: Einige Proxys behandeln HTTP und HTTPS unterschiedlich. Stellen Sie sicher, dass Sie sowohl
HTTP_PROXYals auchHTTPS_PROXYkonfiguriert haben, falls zutreffend, oder deren spezifische Paketmanager-Äquivalente.
Vergleich der Proxy-Konfigurationsmethoden
| Feature / Manager | npm |
pip |
composer |
|---|---|---|---|
| Umgebungsvariablen | Ja (HTTP_PROXY, HTTPS_PROXY) |
Ja (HTTP_PROXY, HTTPS_PROXY) |
Ja (HTTP_PROXY, HTTPS_PROXY) |
| Dedizierter Konfigurationsbefehl | npm config set proxy |
Kein direkter Befehl für Proxy | Kein direkter Befehl für Proxy |
| Speicherort der Konfigurationsdatei | ~/.npmrc |
~/.config/pip/pip.conf / %APPDATA%\pip\pip.ini |
Keine direkte Proxy-Einstellung in composer.json |
| Befehlszeilen-Flag | Kein direktes Proxy-Flag | --proxy |
Kein direktes Proxy-Flag |
| Authentifizierung in URL | Ja | Ja | Ja |
| SSL-Zertifikatshandhabung | cafile, strict-ssl |
cert, trusted-host |
Verlässt sich auf System-/Git-Konfiguration |
| Git-Proxy-Abhängigkeit | Keine direkte Abhängigkeit | Keine direkte Abhängigkeit | Ja (über git config) |
| Registry-URL-Einstellung | registry |
index-url, extra-index-url |
repositories (in composer.json) |