Contao Open Source CMS > Contao-Forum

Zum englischen Forum

Index > Contao-Core > Extension Repository und Proxy

jockel
User
Avatar
Beiträge: 36
Bonn, Deutschland
Hallo Peter,

schade daß die PHP SOAP library keine binäre Transfers unterstützt, dann wäre dies die einfachste Lösung gewesen, aber so natürlich nicht praktikabel. Da bleibt es Leo nur übrig die Request Klasse zu erweitern, was mit Sicherheit auch für andere Module von Vorteil wäre, aber nicht einfach ist. Ich hatte es mir mal kurz angeschaut, nachdem ich an die Stelle mit den Sockets kam, habe ich bei SOAP weitergelesn. :D

D.h. also erstmal die Lösung mit mod_proxy ausprobieren. :)

Gruß, Jörg
2008-11-11 14:15
jockel
User
Avatar
Beiträge: 36
Bonn, Deutschland
Moin.

Also, das mit apache und mod_proxy funktioniert. Folgende Zutaten braucht man dazu:

1. einen apache Server mit einer Webseite, am besten man benutzt eine eigene nur für diesen Zweck,
2. das proxy und proxy_http modul,
3. folgende Einträge in der Config Datei:

iconCode:
        ProxyRequests Off
        ProxyVia Off
        ProxyRemote * http://<PROXY_SERVER>:<PORT>

        ProxyPass /services http://typolight.org/services
        ProxyPassReverse /services http://typolight.org/services

        ProxyPass /repository http://typolight.org/repository
        ProxyPassReverse /repository http://typolight.org/repository

        ProxyPass /system http://www.typolight.org/system
        ProxyPassReverse /system http://www.typolight.org/system

4. folgende einträge in der /etc/hosts Datei auf dem Rechner wo typolight läuft:

iconCode:
<IP_APACHE_SERVER_MIT_MOD_PROXY>  typolight.org
<IP_APACHE_SERVER_MIT_MOD_PROXY>  www.typolight.org

Wenn man alle Zutaten zusammen hat und nichts angebrannt ist, dann Guten Appetit.

5. Als Dessert, man kann den mod_proxy auch auf dem selben Server laufen lassen wie typolight.

Gruß, Jörg
Zuletzt bearbeitet von jockel, 2008-11-12 11:12
2008-11-12 10:19
Hi Jörg,

funktioniert bei mir leider nicht. Wenn ich wie vorgeschlagen die Module proxy u. proxy_http für Apache installiere und oben genannte Angaben (mit Proxy, Port und Server-IP) in die apache2.conf und in die hosts eintrage, bekomme ich ein Backend ohne CSS und ein "verschobenes" Frontend ohne Icons angezeigt.

Bei mir sieht sieht es so aus, dass TYPOlight und Apache auf dem gleichen Server laufen. Um mit diesem Server aber eine Verbidung ins Internet zu bekommen, muss ich mich an einem externen Proxy (auf den keine Zugriff habe) authentifizieren.

Grüße, Marcus
Zuletzt bearbeitet von marcus, 2008-11-12 13:23
2008-11-12 13:20
jockel
User
Avatar
Beiträge: 36
Bonn, Deutschland
Hallo Marcus,

wenn du die Angaben in dieselbe Server Konfiguration eingibst, dann ist das schon ein Fehler. Folgendes funktioniert bei mir:
(ich benutze Debain etch und apache2, sollte aber bei anderen Linux Distributionen ähnlich sein)

A) ich verwende die Modeule proxy (LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so) und proxy_http (LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so) nicht (!) http_proxy.

B) ich verwende VirtualHosts, einen für typolight, einen für den proxy.

iconCode:

NameVirtualHost IP_ADDRESS_DMZ:80
<VirtualHost IP_ADDRESS_DMZ:80>
 ...
deine Konfiguration für typolight
...
</VirtualHost>

NameVirtualHost 127.0.0.1:80
<VirtualHost 127.0.0.1:80>
        ServerAdmin     webmaster@example.com
        ServerName     localhost
        ServerAlias     localhost
        DocumentRoot    /var/www/localhost

        ErrorLog        /var/log/apache2/localhost.error.log
        TransferLog     /var/log/apache2/localhost.access.log

        ## DocumentRoot configuration:
        <Directory /var/www/typolight-proxy>
                Options -Indexes
                Order   deny,allow
                Deny    from all
                Allow   from 127.0.0.1
        </Directory>

        ## Proxy configuration:
        <IfModule mod_proxy.c>
                ProxyRequests Off
                ProxyVia Off
                ProxyRemote * http://USER:PASSWORT@PROXY_SERVER:PORT

                <Proxy *>
                        AddDefaultCharset off
                        Order deny,allow
                        Deny from all
                        Allow from 127.0.0.1
                        ProxyFtpDirCharset UTF-8
                </Proxy>

                ProxyPass /services/ http://typolight.org/services/
                ProxyPass /system/ http://www.typolight.org/system/
        </IfModule>

</VirtualHost>

in der /etc/hosts habe ich dann nur noch folgenden Eintrag hinzugefügt:

iconCode:
127.0.0.1       typolight.org   www.typolight.org

Das wars. Eine kuriosität tauch bei mir noch bei den Links zu den Bildern auf, aber grundsätzlich funktioniert es.

Gruß, Jörg
2008-11-12 13:46
die beiden Module sind geladen und der Proxy als VirtualHost eingerichtet. Es ist mir bis jezt aber noch nicht gelungen den ReverseProxy mit Authentifizierung zu starten.

Wenn ich Apache neu starte erhalte ich folgende Fehlermeldung.

ProxyRemote: Bad syntax for a remote proxy server (bad port number)

Lasse ich user:passwort weg, bekomme ich keine Fehlermeldung. Ich gehe mal davon aus, dass bei ReverseProxy keine Authentifierung möglich ist?
2008-11-12 16:45
jockel
User
Avatar
Beiträge: 36
Bonn, Deutschland
Hi Marcus,

ich befürchte fast, daß

iconCode:
ProxyRemote * http://USER:PASSWORT@PROXY_SERVER:PORT

nicht stimmen wird, in der Anleitung zu ProxyRemote steht auch nur etwas von

iconCode:
ProxyRemote * http://PROXY_SERVER:PORT

das mit user und passwort war nur eine Vermutung von mir.
Googlen brachte einige Antworten zu diesem Thema.

siehe https://issues.apache.org/bugzilla/show_bug.cgi?id=25947 und https://issues.apache.org/bugzilla/show_bug.cgi?id=34837

Wenn ich das richtig verstanden habe, versuche also mal folgendes:

iconCode:
                ProxyPass /services/ http://typolight.org/services/
                ProxyPassReverse /services/ http://typolight.org/services/
                ProxyPass /system/ http://www.typolight.org/system/
                ProxyPassReverse /services/ http://typolight.org/services/

Alternatiev, setze einen Squid auf und definiere den proxy mit authentification als cache_peer und verweise mit ProxyRemote auf den squid ...

Gute Nacht, Jörg
2008-11-12 18:02
Hallo Jörg,

also mod_proxy war noch ok, aber weiter werde ich das Problem nicht verfolgen. ProxyRemote untersützt leider keine Authentifizierung. Ich bleibe beim manuellen Update, trotzdem danke für deine Hilfe!

Viele Grüße, Marcus
2008-11-13 10:17
jockel
User
Avatar
Beiträge: 36
Bonn, Deutschland
Hi,

ich habe nun einen Prototypen für eine Proxy Erweiterung der Request Klasse. :P
Sie ist in einem Modul als "Proof of Concept" zusammengefasst und in der Klasse ProxyRequest implementiert.
Falls Leo möchte, kann er die Erweiterung in die Request Klasse einpflegen.

TODO:
  • Überprüfen ob "Proxy-Authorization" auch funktioniert
  • Überprüfen ob https zu einen Proxy funktioniert
  • Überprüfen ob es den ensprechenden RFCs genügt
  • Proxy Ausnahmen mit Leben füllen (Einstellung vorhanden, aber kein Code)


DONE:
  • in den Einstellungen wird ein Proxy definiert, welcher in der ProxyRequest Klasse verwendet wird
  • per ProxyRequest kann der Proxy geändert werden
  • per ProxyRequest kann der Proxy ein/ausgeschaltet werden

damit die "Extension Repository" mit dieser Erweiterung funktioniert ist noch folgendes nötig:

iconCode:
--- RepositoryBackendModule.php.orig    2008-10-29 15:17:09.000000000 +0100
+++ RepositoryBackendModule.php 2008-11-14 15:29:54.000000000 +0100
@@ -90,13 +90,27 @@
                $wsdl = trim($GLOBALS['TL_CONFIG']['repository_wsdl']);
                if ($wsdl != '') {
                        if (!REPOSITORY_SOAPCACHE) ini_set('soap.wsdl_cache_enabled', 0);
-                       $this->client =
-                               new SoapClient($wsdl,
-                                                               array(
-                                                                 'soap_version' => SOAP_1_2,
-                                                                 'compression' => SOAP_COMPRESSION_AC
CEPT | SOAP_COMPRESSION_GZIP | 1
-                                                               )
-                                       );
+                       if ($GLOBALS['TL_CONFIG']['usePROXY']) {
+                               // get proxy informations
+                               $proxy_uri = parse_url($GLOBALS['TL_CONFIG']['proxy_url']);
+                               $this->client = new SoapClient($wsdl, array(
+                                         'soap_version' => SOAP_1_2,
+                                         'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_
GZIP | 1,
+                                         'proxy_host' => $proxy_uri['host'],
+                                         'proxy_port' => $proxy_uri['port'],
+                                         'proxy_login' => $proxy_uri['user'],
+                                         'proxy_password' => $proxy_uri['pass']
+                                       )
+                               );
+                       } else {
+                               $this->client = new SoapClient($wsdl,
+                                       array(
+                                         'soap_version' => SOAP_1_2,
+                                         'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_
GZIP | 1
+                                       )
+                               );
+                       }
+
                        $this->mode = 'soap';
                } else
                        // fallback toload RepositoryServer class if on central server
@@ -175,4 +189,4 @@

 } // class RepositoryBackendModule

und

iconCode:
--- RepositoryManager.php.orig  2008-11-01 16:14:47.000000000 +0100
+++ RepositoryManager.php       2008-11-14 13:15:21.000000000 +0100
@@ -563,7 +563,7 @@

                                        if ($save) {
                                                // save new or changed file - by Request
-                                               $req = new Request();
+                                               $req = new ProxyRequest();
                                                $req->send($file->url);
                                                if ($req->hasError()) throw new Exception($req->error)
;
                                                $f = new File($filerel);
@@ -643,7 +643,7 @@
                        $this->Files->delete($zipname);

                        // fetch package - using Request class
-                       $req = new Request();
+                       $req = new ProxyRequest();
                        $req->send($pkg->url);
                        if ($req->hasError()) throw new Exception($req->error);
                        $dstfile = new File($zipname);
@@ -1047,4 +1047,4 @@

 } // class RepositoryManager


Gruß, Jörg
2008-11-14 16:11
Hi Jörg,

tolle Sache :thumbup:, werde ich nächste Woche gleich testen!

Grüße, Marcus
2008-11-14 18:18
jockel
User
Avatar
Beiträge: 36
Bonn, Deutschland
Moin.

von den TODOs, habe ich mir nun noch mal einige Punkte angeschaut und dabei kam folgendes raus:

  • "Proxy-Authorization" sollte funktionieren
  • https zu einem Proxy ????? was passiert dan mit einer https Anfrage ????
  • https über einen Proxy ist totaler Schwachsinn, muß ich mir genauer anschauen

bei einer Anfrage nach https://www.example.com/ über einen Proxy, muß man eine Verbindung zum Proxy aufmachen und dann einen "CONNECT" zu www.example.com, dann kommt erst die Verschlüsselung ... (Googeln nach "php fsockopen proxy https" bringt einige Ergebnisse).

Gruß, Jörg
Zuletzt bearbeitet von jockel, 2008-11-16 16:10
2008-11-16 12:49
Hallo Jörg,

gratuliere, tolle Arbeit ... nun funktioniert auch bei mir das Extension Repository mit Proxy und Authentifizierung und dazu noch aus dem Backend!

Nun liegt es wohl an Leo, ob die Einstellung bei Gelegenheit dauerhaft den Weg in Backend findet. Mein Ticket zu diesem Thema wurde leider nach deinem ersten Post geschlossen, aber man könnte es ja auch wieder reaktivieren :)

Viele Grüße, Marcus
2008-11-17 13:29
acenes
Partner
Avatar
Beiträge: 1615
Chur, Schweiz
iconmarcus:
gratuliere, tolle Arbeit ...
Nun liegt es wohl an Leo, ob die Einstellung bei Gelegenheit dauerhaft den Weg in Backend findet.

Dem schliesse ich mich an, gute Arbeit Jörg :)
Peter - "May the the TYPOlight shine on you"
2008-11-17 14:18
jockel
User
Avatar
Beiträge: 36
Bonn, Deutschland
Danke für die Blumen :D

Die Version proxy-0.1 ist nur mit Vorsicht zu genießen!
  1. sie funktioniert gerade mal für http Proxies
  2. sie funktioniert für http Anfragen
  3. so wie es scheint funktioniert auch das mit der Proxy-Authorization

Habe am Wochenende und bis eben noch an den restlichen Punkten gearbeitet, daher gibt es eine Überarbeitete Version proxy-0.2 mit folgenden Änderungen:
iconNotiz:
Version 0.2:
* seperate out connect into a private function
* redo https over proxy; was totaly wrong priviously
* put proxy config into an array

Es sind immer noch Punkte offen:
iconNotiz:
TODO:
* Überprüfen ob es den ensprechenden RFCs genügt
* Proxy Ausnahmen mit Leben füllen (Einstellung vorhanden, aber kein Code)
# keep-alive, HTTP/1.1, etc. ...

Gruß, Jörg
2008-11-17 15:41
Hallo Jörg,

das wäre genau die Lösung nach der ich suche. Leider funktioniert es bei mir noch nicht, der Aufruf der Erweiterungsverwaltung bringt die folgende Fehlermeldung.
iconZitat:
Warning: SoapClient::SoapClient(http://www.typolight.org/services/repository.wsdl) [soapclient.soapclient]: failed to open stream: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. in D:\webserv\Apache\htdocs\system\modules\rep_client\RepositoryBackendModule.php on line 106
Bei acenes Vorschlag bekomme ich wenigstens die Verbindung zum repository, auch wenn die Installation wie oben beschrieben nicht funktioniert. Also liegt es nicht am Proxy.

Der Proxy verlangt eine Anmeldung. Die Angabe des Proxys ohne Protokoll, mit oder ohne Ausnahmen brachte keinen Erfolg.

Hast Du eine idee woran es liegen kann?

Grüße,
mupp3t
2008-11-19 07:08
jockel
User
Avatar
Beiträge: 36
Bonn, Deutschland
Hallo mupp3t,

hast du auch die diffs für die Extension Repository angewendet, wie ich in http://www.typolight.org/board/message/55885.html geschrieben habe?
Das proxy modul erweitert typolight nur um eine ProxyRequest Klasse, ändert die ER aber nicht.

Gruß, Jörg
2008-11-19 10:33