Proxy in Apache eintragen

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

Proxy in Apache eintragen

Postby wernerz2 » 24. February 2020 09:20

Hi,

ich hoffe mal, dass ich hier mit meiner Frage richtig bin.
Ich habe in einem Intranet einen Xampp-Server für Foren, etc. stehen.
Die Foren fragen jetzt in der Adminkonsole verschiedene Dienste ab, was nicht funktioniert, da der Server ja im Intranet steht. Dadurch wird aber die Administration extrem langsam und die Abfrage nach neuen Versionen funktioniert nicht.
Jetzt dachte ich mir, wenn ich dem Webserver sage wie er ins Internet kommt, dann müssten die Systeme auch ins Internet kommen und die Administration würde wieder normal funktionieren.

Wenn ich suche finde ich zwar zig Anleitungen wie ich den Apache zum Proxy mache, aber nirgendwo wie ich einen Proxy im Apache eintrage.
Kann mir da einer weiter helfen.

Danke
Gruß Werner
wernerz2
 
Posts: 3
Joined: 24. February 2020 09:14
XAMPP version: 3.2.4
Operating System: Windows

Re: Proxy in Apache eintragen

Postby Nobbie » 24. February 2020 11:27

Was heisst denn, dass die Foren "in der Adminkonsole" bestimmte "Dienste" abfragen? Das verstehe ich leider überhaupt nicht.

Unabhängig davon, ein Proxy ändert nichts daran, ob Apache ins Internet kommt oder nicht. Der Xampp Server muss einfach wie jeder normale PC am Internet angeschlossen sein, via LAN oder WLAN und meistens über irgendeinen Router. Das ist die Voraussetzung und die reicht auch schon. Wenn das nicht der Fall ist, musst Du das einrichten. Wenn die Verbindung dennoch nicht klappt, ist mit Sicherheit eine Firewall Schuld daran.

Man kann zwar Apache als Proxy konfigurieren, aber auch da ist schon Voraussetzung, dass Apache ins Internet kommt und man kann auch sog. Reverse Proxys einrichten, aber das hat alles nichts mit Deinem Problem zu tun.

Es gibt auch keine Erweitetung, um Apache zu sagen, dass er einen Proxy benutzen soll. Das müsste man, wenn überhaupt, in den Requests in PHP (also in der Forensoftware) ausprogrammieren.
Nobbie
 
Posts: 11717
Joined: 09. March 2008 13:04

Re: Proxy in Apache eintragen

Postby wernerz2 » 24. February 2020 12:38

Hi Nobbie,

klar ist eine Firewall Schuld, dass der Server nicht ins Internet kommt, dass soll aber auch so sein. Ist schließlich ein Intranet.
OK, wenn man as nicht im Apache konfigurieren kann, habe ich wohl gelitten.

Trotzdem Danke.

Gruß Werner
wernerz2
 
Posts: 3
Joined: 24. February 2020 09:14
XAMPP version: 3.2.4
Operating System: Windows

Re: Proxy in Apache eintragen

Postby Nobbie » 24. February 2020 13:50

wernerz2 wrote:klar ist eine Firewall Schuld, dass der Server nicht ins Internet kommt, dass soll aber auch so sein. Ist schließlich ein Intranet.


Dann muss man eben eine Ausnahme in der FIrewall definieren, dafür sind die ja konfigurierbar.

Ich habe mir das ganze Konstrukt noch einmal durch den Kopf gehen lassen, jetzt verstehe ich auch wirklich, was gesucht ist. Das Problem besteht darin, dass Apache selbst überhaupt nichts ins Internet geht, die Zugriffe aus dem Forenscript werden direkt von PHP selbst durchgeführt, d.h. es wird ein direkter TCPIP Request für HTTP von PHP durchgeführt. Es wird NICHT "oben herum" via Apache zugegriffen, Apache bekommt überhaupt nichts davon mit, dass das Forenscript einen Request ausführt. Und deswegen gibt es auch keine Möglichkeit, irgendetwas in Apache zu konfigurieren, damit diese Requests via irgendeinen Proxy geschehen.

Wenn die Firewall nicht angepasst werden darf, bleiben also nur noch 2 Lösungsmöglichkeiten:

1) Im Forenscript nachschauen, ob diese Zugriffe unbedingt erfolgen (was eigentlich komisch wäre), oder ob es konfigurierbar ist, dass das Script diese Requests überhaupt versucht. Das ist ja eigentlich ein Standard bei vielen Softwareprodukten, dass sie (nur auf Wunsch) automatisiert nach Updates suchen. Und Timeouts dauern natürlich relativ lange, weswegen es eigentlich normal wäre, wenn man diese "Dienste" optional ausführen kann. Das wäre das erste, was ich suchen würde, ob man das einfach abstellen kann.

2) Ansonsten, wenn es nicht geht, den Zugriff via Proxy in das Forenscript einprogrammieren. Das Forenscript bedient sich ja irgendeiner API (ggf. via Curl oder so, vielleicht auch direkte TCPIP Verbindungen via fsockopen(), oder vielleicht auch einfache Dateifunktionen mit URLs und aktiviertem URL-Wrapper, das muss man eben nachschauen) und den normalen GET aus dem HTTP Request durch einen entsprechenden Request auf den Proxy ersetzen. Ich habe bei php.net auf der Doku von fsockopen() eine komplette PHP Klasse gefunden, die genau das tut, was Du suchst, nämlich aus einem Intranet via Proxy einen HTTP Request nach außen absetzen. Ich kopiere das mal hier rein:

Code: Select all
If you have to use a proxy to make requests outside of your local network, you may use this class:

<?php
/*
*
* No Proxy Authentification Implemented; PHP 5
*
*/

class RemoteFopenViaProxy {

    private $result;
    private $proxy_name;
    private $proxy_port;
    private $request_url;

    public function get_proxy_name() {
        return $this->proxy_name;
    }

    public function set_proxy_name($n) {
        $this->proxy_name = $n;
    }

    public function get_proxy_port() {
        return $this->proxy_port;
    }

    public function set_proxy_port($p) {
        $this->proxy_port = $p;
    }

    public function get_request_url() {
        return $this->request_url;
    }

    public function set_request_url($u) {
        $this->request_url = $u;
    }

    public function get_result() {
        return $this->result;
    }

    public function set_result($r) {
        $this->result = $r;
    }

    private function get_url_via_proxy() {

        $proxy_fp = fsockopen($this->get_proxy_name(), $this->get_proxy_port());

        if (!$proxy_fp) {
            return false;
        }
        fputs($proxy_fp, "GET " . $this->get_request_url() . " HTTP/1.0\r\nHost: " . $this->get_proxy_name() . "\r\n\r\n");
        while (!feof($proxy_fp)) {
            $proxy_cont .= fread($proxy_fp, 4096);
        }
        fclose($proxy_fp);
        $proxy_cont = substr($proxy_cont, strpos($proxy_cont, "\r\n\r\n") + 4);
        return $proxy_cont;

    }

    private function get_url($url) {
        $fd = @ file($url);
        if ($fd) {
            return $fd;
        } else {
            return false;
        }
    }

    private function logger($line, $file) {
        $fd = fopen($file . ".log", "a+");
        fwrite($fd, date("Ymd G:i:s") . " - " . $file . " - " . $line . "\n");
        fclose($fd);
    }

    function __construct($url, $proxy_name = "", $proxy_port = "") {

        $this->set_request_url($url);
        $this->set_proxy_name($proxy_name);
        $this->set_proxy_port($proxy_port);

    }

    public function request_via_proxy() {

        $this->set_result($this->get_url_via_proxy());
        if (!$this->get_result()) {
            $this->logger("FAILED: get_url_via_proxy(" . $this->get_proxy_name() . "," . $this->get_proxy_port() . "," . $this->get_request_url() . ")", "RemoteFopenViaProxyClass.log");
        }
    }

    public function request_without_proxy() {

        $this->set_result($this->get_url($this->get_request_url()));
        if (!$this->get_result()) {
            $this->logger("FAILED: get_url(" . $url . ")", "RemoteFopenViaProxyClass.log");
        }
    }
}
?>

Use it this way:

<?php
// call constructor
$obj = new RemoteFopenViaProxy($insert_request_url, $insert_proxy_name, $insert_proxy_port);
// change settings after object generation
$obj->set_proxy_name($insert_proxy_name);
$obj->set_proxy_port($insert_proxy_port);
$obj->set_request_url($insert_request_url);
$obj->request_via_proxy();
echo $obj->get_result();
?>

If there are errors during execution, the script tries to write some useful information into a log file.


Diese Klasse musst Du in das Forenscript einbinden und dann die notwendigen Requests gemäß des unten angeführten Syntaxbeispiels anpassen. Dann hast Du eine komplette Lösung inkl. Proxyzugriff. Sicherlich könnte man das auch via Curl programmieren, aber diese Klasse ist ja auch einfach zu bedienen.
Nobbie
 
Posts: 11717
Joined: 09. March 2008 13:04

Re: Proxy in Apache eintragen

Postby wernerz2 » 24. February 2020 16:07

Hi Nobbie,

Danke für die ausführliche Antwort.
OK, dann ist der Apache raus.

ich werde mal auf der Firewall loggen lassen, welche Ports das Script anspricht. Wenn es nur 8080 oder 433 ist, geht da sicher was mit Regeln, ansonsten wohl eher nicht.
Die Forensoftware um bauen ist mir eigentlich ein zu großer Act, da ich das ja schlimmsten Fall bei jedem Update nachziehen darf.

Das sind leider keine Dienste die gestartet werden sondern im Quelltext der Software integriert, kann man also leider nicht konfigurieren. Dann muss ich mal schauen was ich machen.

Danke

gruß Werner
wernerz2
 
Posts: 3
Joined: 24. February 2020 09:14
XAMPP version: 3.2.4
Operating System: Windows

Re: Proxy in Apache eintragen

Postby Nobbie » 24. February 2020 16:58

wernerz2 wrote:Das sind leider keine Dienste die gestartet werden sondern im Quelltext der Software integriert, kann man also leider nicht konfigurieren. Dann muss ich mal schauen was ich machen.


Das ist mir schon klar, aber ich kenne die Forensoftware jetzt auch nicht, vielleicht gibt es in der Adminoberfläche ja irgendwo einen Haken a la "automatisch nach Updates suchen" oder so. Und dann könnte man das abschalten. Wie ich schon sagte, eigentlich erscheint mir das als selbstverständlich, dass man da irgendwo einen Haken setzen kann, denn sonst hat man genau DAS Problem, welches Dich aktuell plagt. Dass diese Anfragen gegen die Wand laufen (bei fehlender Internetverbindung) und man ätzend lang auf einen Timeout warten muss.

Es gäb vielleicht noch einen Trick, wenn Du ggf. weißt, auf welche Server/Domains die Forensoftware gerne zugreift, dann kannst Du in der lokalen hosts Datei des Xampp Servers einfach einen Dummy Eintrag schreiben a la:

Code: Select all
127.0.0.1 www.forensoftwarehersteller.de


Dann dauert die Namensauflösung und die Suche nach dem Server nicht mehr so lange, es gibt keinen Timeout, nur die Antwort kommt dann von Deinem Xampp Rechner, der antwortet natürlich gar nichts sinnvolles, aber eben per sofort. Dann wird die Forensoftware innerhalb kürzester Zeit zur Erkenntnis gelangen, dass es nichts zu holen gibt. Was ja OK ist, auf alle Fälle umgehst Du die lange Warterei auf einen Timeout. Ein bißchen tricky, aber ich würde vermuten, dass das ENORM das Laufzeitverhalten verbessert.
Nobbie
 
Posts: 11717
Joined: 09. March 2008 13:04


Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 12 guests