Proxy-Server für ausgehende Verbindungen unter PHP festlegen

Diese Anleitung beschreibt wie Sie die IDNT Compute Cloud Proxy Server für ausgehende HTTP oder FTP Verbindungen unter PHP konfigurieren.

Konfiguration für PHP

Für den Zugriff auf externe Ressourcen aus PHP wird meist die interne file API oder curl verwendet. Die oben genannten Umgebungsvariablen stehen standardmäßig nicht in der Umgebung von PHP zur Verfügung. In den folgenden beiden Beispielen wird der Proxy-Server manuell für den jeweiligen Url Abfruf gesetzt.

Die interne File API verwenden

Beispiel Aufruf:

$content = file_get_contents('https://www.idnt.net/de-DE')

Um einen Proxy-Server für diesen Aufruf zu konfigurieren, ist ein stream context erforderlich, welchen Sie wie folgt erstellen:

$options = array(
    'http' => array(
        'proxy' => 'tcp://proxy.compute.cloud.idnt.net',
        'request_fulluri' => true,
    ),
);
$context = stream_context_create($options);
$content = file_get_contents('https://www.idnt.net/de-DE', false, $context)

Weitere Informationen zu den stream context Optionen finden Sie auch direkt unter http://php.net/manual/de/context.php

Proxy global setzen

Warnung! Wir raten den Proxy nach Möglichkeit nicht global zu setzen. Nutzen Sie diese Methode nur, wenn Sie die Anwendungen ausgiebigen Sicherheitstests unterzogen haben.

Wenn Sie den Proxy-Server global setzen möchten, können Sie die Optionen per stream_context_set_default setzen:

stream_context_set_default($context)

Um dies nicht innerhalb des Programmcodes machen zu müssen und den Proxy zentral konfiguriere zu können, ist auch folgende Variante möglich. Erstellen Sie an geeigneter Stelle außerhalb des Webserver- Root- Verzeichnis ein PHP-Script mit folgendem Inhalt:

<?php
        $context = array(
            'http' => array(
                'proxy' => 'tcp://proxy.compute.cloud.idnt.net',
                'request_fulluri' => true,
        );
        stream_context_set_default($context);
?>

Fügen Sie in der Datei php.ini folgende Konfigurationsanweisung hinzu um das Sript global mit einzufügen:

auto_prepend_file=<PFAD ZU SCRIPT>

cURL verwenden

Folgendes Beispiel ruft die Url http://www.idnt.net/de-DE/ ohne Proxy-Server ab:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.idnt.net/de-DE");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
$data = curl_exec($ch);
curl_close($ch);
echo $data;

Um den Proxy-Server zu konfigurieren, erweitern Sie die Optionen einfach wie folgt:

curl_setopt($ch, CURLOPT_PROXY, 'proxy.compute.cloud.idnt.net:8080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);

Weitere Informationen zu curl_setopt finden Sie unter http://php.net/manual/de/function.curl-setopt.php.


Proxy-Server global in PHP setzen

Warnung! Wir raten den Proxy nach Möglichkeit nicht global zu setzen. Nutzen Sie diese Methode nur, wenn Sie die Anwendungen ausgiebigen Sicherheitstests unterzogen haben.

Um den Proxy-Server global zu setzen, müssen die Umgebungsvariablen lediglich in der PHP Umgebung verfügbar gemacht werden. Wie dies funktioniert hängt von der verwendeten PHP-Installation ab:

Proxy-Umgebungsvariablen für Apache mit mod_php setzen

Über das Modul mod_env können beliebige Umgebungsvariablen gesetzt werden. Fügen Sie einfach die folgenden Zeilen zur Apache Konfiguration hinzu:

SetEnv http_proxy http://proxy.compute.cloud.idnt.net:8080
SetEnv https_proxy http://proxy.compute.cloud.idnt.net:8080
SetEnv ftp_proxy http://proxy.compute.cloud.idnt.net:8080
SetEnv no_proxy localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

Starten Sie Apache hiernach neu.

Proxy-Umgebungsvariablen für PHP-FPM setzen

Hier können wir direkt die systemweite Konfiguration aus der Umgebun übernehmen. Fügen Sie einfach die folgenden Zeilen in Ihre FPM Konfiguration (z.B. php-fpm.d/www.conf) ein:

env[http_proxy] = $http_proxy
env[https_proxy] = $https_proxy
env[ftp_proxy] = $ftp_proxy
env[no_proxy] = $no_proxy

Starten Sie php-fpm hiernach neu.