I-doit auf Server hinter NAT
-
Hallo,
Ich hab die beta 0.9 auf einem ubuntu 6.06 LTS Server installiert. Läuft super, solange ich es aus dem lokalen Netz aufrufe. Wenn ich in der Firmenfirewall ein NAT-Routing auf den VHost einrichte - vereinfacht etwa so:iptables -t nat -I PREROUTING -p tcp -m tcp –dport 9876 -j DNAT --to-destination 192.168.10.12:80
(wobei der Server intern die Adresse 192.168.10.12 hat und der i-doit Host direkt auf Port 80 läuft)kann ich den die Applikation unter http://meinedomain:9876 durchaus von außen erreichen, mich sogar einloggen, allerdings klappen alle Includes nicht mehr so recht. Stylesheets greifen nicht (die CSS includes werden offenbar nicht geladen, bzw nicht gefunden). Ist leider nicht nutzbar so. Gibts da Abhilfe?
Andere Präsenzen auf dem selben Server kann ich problemlos auf diese Art nach außen freigeben.
Gruß, Mirko
-
Hallo Mirko,
ich glaube, das passiert, weil wir Stylesheet und CSS pro Sitzung auf unserem Server cachen, damit diese nicht immer neu generiert werden müssen (und somit der Client diese auch cachen kann), was in 3 Requests pro normalen User-Request resultieren würde. Intern werden für CSS und JS interne HTTP-Abfragen durchgeführt - das Resultat wird dabei in sitzungsspezifischen Dateien gespeichert, so daß der Benutzer lediglich einmal CSS und JS Datei laden muss.
Mir kommt es so vor, als wenn er für die internen Abfragen deinen Zielport nicht berücksichtigt, er geht von 80 anstelle von 9876 aus. Im Quellcode sieht es momentan so aus (in der Datei src/classes/smarty/isys_smarty_plugin_http_cachefile.class.php, ab Zeile 46):
$l_loc_url = strtolower(substr($_SERVER['SERVER_PROTOCOL'], 0, strpos($_SERVER['SERVER_PROTOCOL'], "/"))) . "://" . $l_authstr . isys_glob_create_tcp_address($_SERVER['SERVER_ADDR'], $_SERVER['SERVER_PORT']) . "/" . $g_config["www_dir"] . $p_params["p_strURL"];
Wie du siehst, verwenden wir $_SERVER['SERVER_PORT'] als Zielport für die internen Abfragen, der natürlich bei dir auf 80 konfiguiert ist. Wir müssen eine Möglichkeit einbauen, diesen Port oder halt das, was vor jede URL geschrieben wird (also http://meindomain:9876/), konfiguierbar zu machen.
Ich hab an diesen Post einen Patch angehangen, der die SERVER_PORT Angabe durch deinen Zielport austauscht (9876). Dann sollte es funktionieren. Bitte vergiss nicht, deinen temp-Ordner zu leeren, bevor du das testet!
-
Hi,
Danke vielmals für den Patch! Das reicht aber nicht komplett, weils ja intern weiterhin auf Port 80 erreicht werden sollte. Außerdem ist die Servervariable $_SERVER['SERVER_PORT'] nach dem Weiterleiten sehrwohl noch korrekt gesetzt (in diesem Fall 9876). Das bedeutet, dass die ursprüngliche Fassung das gleiche Ergebnis brachte wie nach dem Patch. Allerdings liegt der Fehler sehr wohl an dieser Stelle irgendwo, wenn ich den Port in der Weiterleitung nicht ändere klappts nämlich. Ich hab jetzt leider keine Zeit mehr zu Suchen, deswegen mache ich nen Workaround:
Ich hab den ganzen virtuellen Host auf 9876 gelegt und diesen eins zu eins in der Firewall weiterleitet - dann klappts von überall. Muss man im LAN eben den Port mit angeben. Das macht aber nichts.Gruß, Mirko