Integration des IES in den Apache

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen

Allgemeines

Der IES ist i.d.R. für sämtliche Dateien im DocumentRoot eines Publishers zuständig. Die Dateien werden entsprechend über den Nutzer des IES angelegt. Da jedoch der Apache diese lesen bzw. über PHP verändern / ergänzen können sollte, empfehlen wir die Zugriffsrechte entsprechend einzustellen. Unter Linux kann das einfach erreicht werden, indem der Nutzer des Webservers auch in die Gruppe ies aufgenommen wird. Die UMASK des IES ist entsprechend voreingestellt.

Konfiguration des DocumentRoot

Im DocumentRoot eines Publikationsbereiches werden neben den eigentlichen Artikeldaten auch noch Systemdaten der IES-Module gespeichert. Diese dienen u.a. zum Aufbau einer Sitemap o.ä. Damit diese vor direkten URL-Aufrufen geschützt werden können, werden entsprechende .htaccess-Dateien durch die Module generiert. Hierzu muss im Apache (und im Microsoft IIS über die Erweiterung Helicon Ape) die Auswertung dieser Daten erlaubt werden.

Da der IES sämtliche Daten der Module in das Unterverzeichnis /WEB-IES/ speichert ist die Konfiguration wie folgt möglich:

<VirtualHost *:80>
	<Directory "....$PATH_TO_DOCUMENT_ROOT.../WEB-IES">
		Options -Indexes
		AllowOverride LIMIT
	</Directory>
</VirtualHost>

Hinweise zur Integration des IES in den Apache

Die Integration des IES in den "Internet Information Server" von Microsoft ist über den sog. JK-Connector prinzipiell möglich. Weitere Informationen hierzu finden Sie im Internet

Grundsätzlich empfehlen wir sowohl unter Linux, wie auch unter Windows den Einsatz des Apache-Webservers, da wir aufgrund unserer Erfahrungen hier den besten Support liefern können.

Für die optionale Integration des IES in den Apache Webserver empfehlen wird das Apache-Modul proxy_http. Folgende Konfiguration kann als Vorlage dienen. Die ProxyPassMatch Anweisungen sind jedoch erst ab der Version 2.2.5 verfügbar.

Folgende Module sind für die unten aufgeführten Konfigurationsvorlagen notwendig:

   mod_proxy
   mod_proxy_balancer
   mod_proxy_http
   mod_lbmethod_byrequests # ab Apache 2.4 für proxy notwendig!!!
   mod_rewrite
   mod_ssl
   mod_headers 


Da Passwörter und andere vertrauliche Daten mit dem IES ausgetauscht werden, muss immer HTTPS für den Apache eingerichtet werden.

IES Apache-Konfiguration

Für die Integration des IES in den Apache sollte ein eigener Virtueller Host eingerichtet werden. Für diesen Virtueller Host ist kein DocumentRoot notwendig!

<VirtualHost *:80>

    ServerName <<cms-host>>

    # Alle gültigen IES-Anfragen, die auf Port 80 erfolgen, sollten vollständig an Port 443 umgelenkt werden. Diese Aufrufe können zum einen durch
    # Redakteure erfolgen, die häufig URLs ohne "https" eingeben, zum anderen aber auch durch Aufrufe, die durch SPML- bzw. JSP-Seiten erzeugt werden,
    # da diese intern über "http" auf Port 8080 bearbeitet werden und keine Informationen dazu haben, dass SSL von Außen eingesetzt wird.
    RedirectMatch  ^(.*)$ https://<<cms-host>>$1

</VirtualHost>
<VirtualHost *:443>

    ServerName <<cms-host>>

    ErrorLog        /var/log/apache2/<<cms-host>>.err
    CustomLog       /var/log/apache2/<<cms-host>>.log combined

    # Infosite redirect
    RewriteEngine On
    RewriteRule ^/$ /ies/infosite/ [R,L]


    ###################################
    # IES integration using mod_proxy #
    ###################################

    # security
    ProxyRequests Off

    # timeout
    ProxyTimeout 3600

    # always keep the host header
    ProxyPreserveHost On

    # load balancer
    <Proxy balancer://ies-balancer>
        Order Deny,Allow
        Allow from All
        BalancerMember http://localhost:8080 timeout=3600 retry=0
    </Proxy>

    ProxyPassMatch ^(/ies/.*)$                               balancer://ies-balancer$1 stickysession=JSESSIONID nofailover=On
    ProxyPassMatch ^(/infosite-webdav/.*)$                   balancer://ies-balancer$1 stickysession=JSESSIONID nofailover=On
    ProxyPassMatch ^(/xip/.*)$                               balancer://ies-balancer$1 stickysession=JSESSIONID nofailover=On
    ProxyPassMatch ^(/infosite/.*)$                          balancer://ies-balancer$1 stickysession=JSESSIONID nofailover=On

    # Innerhalb eines Virtuellen Hosts für HTTPS sollte immer der Header X-IES-SCHEME auf https gesetzt werden, da nur so
    # innerhalb von IES-Applikationen ${system.baseurl} richtig aufgelöst wird. Weitere X-IES Header-Angaben sind i.d.R. nicht notwendig
    #RequestHeader set X-IES-SERVER-NAME "ies.intern.net" # evtl. abweichender ServerName
    #RequestHeader set X-IES-SERVER-PORT "1443" # evtl. abweichender Port
    RequestHeader set X-IES-SCHEME "https"

</VirtualHost>


Hinweise zur Integration von IES-Anfragen in dem Apache des Webservers

Webseiten-Apache-Konfiguration mit IES-API Zugriff

Dies Konfiguration ist notwendig für:

  • den I-Link im SRPC-Modus in InfoSite6
  • Module und Komponenten mit Live-Abfragen (zB. Verzeichnismodul mit der Möglichkeit Objekte anzulegen)
  • CityCall mit Anbindung an das Ticketsystem
<VirtualHost *:80>

    ServerName www.ies-alias-hostname.de
    DocumentRoot ...
 
    ErrorLog        ...
    CustomLog       ...
    ...

    ###################################
    # IES integration using mod_proxy #
    ###################################

    # security
    ProxyRequests Off

    # always keep the host header
    ProxyPreserveHost Off

    # timeout
    ProxyTimeout 3600

    # load balancer IES-API
    <Proxy balancer://ies-api-balancer>
        Order Deny,Allow
        Allow from All
        # Wenn auf dem CMS-Server: BalancerMember http://localhost:8080 timeout=3600 retry=0
        BalancerMember http://<<cms-host>>:8080 timeout=3600 retry=0
    </Proxy>

    ProxyPassMatch ^(/ies/api/.*)$                         balancer://ies-api-balancer$1 stickysession=JSESSIONID nofailover=On
    ####### oder auf bestimmte Module begrenzt: ######
    # ProxyPassMatch ^(/ies/MODUL/.*)$                       balancer://ies-api-balancer$1 stickysession=JSESSIONID nofailover=On
    # Beispiele: 
    # ProxyPassMatch ^(/ies/formservice/.*)$                 balancer://ies-api-balancer$1 stickysession=JSESSIONID nofailover=On
    # ProxyPassMatch ^(/ies/infoticket/.*)$                  balancer://ies-api-balancer$1 stickysession=JSESSIONID nofailover=On
    # ProxyPassMatch ^(/ies/jslibs/.*)$                      balancer://ies-api-balancer$1 stickysession=JSESSIONID nofailover=On

</VirtualHost>

Webseiten-Apache-Konfiguration für Publikationsbereiche mit Live-Komponenten

Publikationsbereiche des IES die Live-Komponenten verwenden und somit auf den IES zugreifen müssen, werden wie folgt konfiguriert.

<VirtualHost *:80>

    ServerName ...
    DocumentRoot ...
 
    ErrorLog        ...
    CustomLog       ...

    ...

    ###################################
    # IES integration using mod_proxy #
    ###################################

    # security
    ProxyRequests Off

    # always keep the host header
    ProxyPreserveHost On

    # timeout
    ProxyTimeout 3600

    # Bei Zugriff auf BalanceMember via HTTPS
    #SSLProxyEngine On

    # load balancer
    <Proxy balancer://ies-balancer>
        Order Deny,Allow
        Allow from All
        BalancerMember http://<<cms-host>>:8080 timeout=3600 retry=0

        # Alternativ kann auch direkt der Apache des CMS-Systems angesprochen werden,
        # da dieser Anfragen automatisch intern an den IES weiterleitet.
        #BalancerMember http://<<cms-host>>:80 timeout=3600 retry=0

        # Bei Zugriff via SSL empfehlen wir die Verschlüsselung über den Apache zu konfigurieren.
        # Dieser leitet dann die unverschlüsselte Anfrage an den lokalen IES (intern über Port 8080)
        # Wird der BalanceMember via HTTPS angesprochen muss noch SSLProxyEngine auf ON gesetzt werden (s.o.)
        #BalancerMember https://<<cms-host>>:443 timeout=3600 retry=0
    </Proxy>

    # Der Ordner, der am Publisher für SPML-Live-Seiten konfiguriert wurde muss für "<<spml_live_folder>>" eingesetzt werden
    ProxyPassMatch ^(/<<spml_live_folder>>/.*\.spml(;jsessionid=\w+)?(\?.*)?)$  balancer://ies-balancer$1 stickysession=JSESSIONID nofailover=On
    ProxyPassMatch ^(/<<spml_live_folder>>/ies/binary/.*)$                      balancer://ies-balancer$1 stickysession=JSESSIONID nofailover=On
    # danach sollte, um die taglibs und andere für den IES notwendigen Elemente NICHT vom Apache ausliefern zu lassen, der Zugriff durch den Apache verboten werden
    <Directory <<DocumentRoot>>/WEB-INF>
      Order deny,allow
      Deny from all
    </Directory>


    # COUNTER 
    # Variante 1: RedirectMatch auf den Server (CMS muss öffentlich erreichbar sein)
    #RedirectMatch  ^/ies/counter(.*) https://<<cms-host>>/ies/infosite/counter$1

    # Variante 2: Rewrite, wenn über eine RewriteCondition noch Bedingungen angegeben werde sollen.
    # Rewrite um die Counter-Aufrufe (unabhaengig von Aliases) an das CMS (mit der konfigurierten Publisher-URL) zu schicken
    RewriteEngine on

    # Zugriff auf das CMS nur über den Webserver (als Proxy)
    RewriteRule ^/ies/counter(.*)           https://<<cms-host>>/ies/infosite/counter$1 [L,NE,P] # Proxy NICHT, wenn CMS- und Webserver ein Host sind
    RewriteRule ^/infosite/counter(.*)      https://<<cms-host>>/ies/infosite/counter$1 [L,NE,P] # Proxy NICHT, wenn CMS- und Webserver ein Host sind
    RewriteRule ^/ies/infosite/counter(.*)  https://<<cms-host>>/ies/infosite/counter$1 [L,NE,P] # Proxy NICHT, wenn CMS- und Webserver ein Host sind

</VirtualHost>

Alternative Variante, wenn IES-API UND SPML-Seite unterstützt werden müssen

Für den I-Link im SRPC-Modus in InfoSite6 muss der Zugriff auf die IES-API konfiguriert werden!

WICHTIG:

Wenn die Webseite ebenfalls auf dem CMS-Server liegt, dann wird voraus gesetzt, dass der Hostname (s.u. <<cms-host>>) und der <<ies-alias-hostname>> der Webseite in der /etc/hosts auf 127.0.0.1 zeigt und in der sitepark.conf der Parameter IES_BIND_ADDRESS="localhost" konfiguriert ist.

Sind die Server getrennt, muss die Url <<ies-alias-hostname>> als Alias im CMS-Server für den Publikationsbereich eingerichtet werden und auf dem Webserver ein Hosts-Eintrag mit der Url auf den CMS-Server erstellt werden. Außerdem ist folgende Anpassung der Bind-Address in der sitepark.conf notwendig: IES_BIND_ADDRESS="0.0.0.0"


<VirtualHost *:80>

    ServerName www.ies-alias-hostname.de
    DocumentRoot ...
 
    ErrorLog        ...
    CustomLog       ...

    ...

    ###################################
    # IES integration using mod_proxy #
    ###################################

    # security
    ProxyRequests Off

    # always keep the host header
    ############# WICHTIG: muss auf 'Off' stehen #################
    ProxyPreserveHost Off

    # timeout
    ProxyTimeout 3600

    # load balancer IES
    <Proxy balancer://ies-balancer>
        Order Deny,Allow
        Allow from All
        ############# WICHTIG: Es muss der richtige Hostname gesetzt werden #################
        BalancerMember http://<<ies-alias-hostname>>:8080 timeout=3600 retry=0
    </Proxy>

    # Der Ordner, der am Publisher für SPML-Live-Seiten konfiguriert wurde muss für "<<spml_live_folder>>" eingesetzt werden
    ProxyPassMatch ^(/<<spml_live_folder>>/.*\.spml(;jsessionid=\w+)?(\?.*)?)$  balancer://ies-balancer$1 stickysession=JSESSIONID nofailover=On
    ProxyPassMatch ^(/<<spml_live_folder>>/ies/binary/.*)$                      balancer://ies-balancer$1 stickysession=JSESSIONID nofailover=On
    # danach sollte, um die taglibs und andere für den IES notwendigen Elemente NICHT vom Apache ausliefern zu lassen, der Zugriff durch den Apache verboten werden
    <Directory <<DocumentRoot>>/WEB-INF>
      Order deny,allow
      Deny from all
    </Directory>

    # load balancer IES-API
    <Proxy balancer://ies-api-balancer>
        Order Deny,Allow
        Allow from All
        # Wenn auf einem Server: BalancerMember http://localhost:8080 timeout=3600 retry=0
        BalancerMember http://<<cms-host>>:8080 timeout=3600 retry=0
    </Proxy>
    ProxyPassMatch ^(/ies/api/.*)$                         balancer://ies-api-balancer$1 stickysession=JSESSIONID nofailover=On
    ####### weitere Module ######
    # ProxyPassMatch ^(/ies/MODUL/.*)$                         balancer://ies-api-balancer$1 stickysession=JSESSIONID nofailover=On
    # Beispiele: 
    # ProxyPassMatch ^(/ies/formservice/.*)$                balancer://ies-api-balancer$1 stickysession=JSESSIONID nofailover=On
    # ProxyPassMatch ^(/ies/infoticket/.*)$                  balancer://ies-api-balancer$1 stickysession=JSESSIONID nofailover=On
    # ProxyPassMatch ^(/ies/jslibs/.*)$                      balancer://ies-api-balancer$1 stickysession=JSESSIONID nofailover=On

    # COUNTER 
    # Variante 1: RedirectMatch auf den Server (CMS muss öffentlich erreichbar sein)
    #RedirectMatch  ^/ies/counter(.*) https://<<cms-host>>/ies/infosite/counter$1

    # Variante 2: Rewrite, wenn über eine RewriteCondition noch Bedingungen angegeben werde sollen.
    # Rewrite um die Counter-Aufrufe (unabhaengig von Aliases) an das CMS (mit der konfigurierten Publisher-URL) zu schicken
    RewriteEngine on

    # Zugriff auf das CMS nur über den Webserver (als Proxy)
    RewriteRule ^/ies/counter(.*)           http[s]://<<cms-host>>/ies/infosite/counter$1 [L,NE,P] # Proxy NICHT, wenn CMS- und Webserver ein Host sind
    RewriteRule ^/infosite/counter(.*)      http[s]://<<cms-host>>/ies/infosite/counter$1 [L,NE,P] # Proxy NICHT, wenn CMS- und Webserver ein Host sind
    RewriteRule ^/ies/infosite/counter(.*)  http[s]://<<cms-host>>/ies/infosite/counter$1 [L,NE,P] # Proxy NICHT, wenn CMS- und Webserver ein Host sind

</VirtualHost>

Apache-Konfiguration Version < 2.2.5

Bei älteren Apache-Versionen (< Version 2.2.5) ist unter Umständen statt einer ProxyPassMatch eine RewriteRule einzusetzen:

###################################
# IES integration using mod_proxy #
###################################

# security
ProxyRequests Off

# always keep the host header
ProxyPreserveHost On

# timeout
ProxyTimeout 3600

# load balancer
<Proxy balancer://ies-balancer>
    Order Deny,Allow
    Allow from All
    BalancerMember http://localhost:8080 timeout=3600 retry=0
</Proxy>

RewriteEngine On
RewriteRule ^(/<<spml_live_folder>>/.*\.spml(;jsessionid=\w+)?(\?.*)?) balancer://ies-balancer$1 [P]
RewriteRule ^(/<<spml_live_folder>>/ies/binary/.*)$ balancer://ies-balancer$1 [P]
# danach sollte, um die taglibs und andere für den IES notwendigen Elemente NICHT vom Apache ausliefern zu lassen, der Zugriff durch den Apache verboten werden
<Directory <<DocumentRoot>>/WEB-INF>
  Order deny,allow
  Deny from all
</Directory>

RewriteRule ^(/infosite-webdav/.*)$ balancer://ies-balancer$1 [P]

# Innerhalb eines Virtuellen Hosts für HTTPS sollte immer der
# Header X-IES-SCHEME auf https gesetzt werden,
# da nur so innerhalb von IES-Applikationen ${system.baseurl}
# richtig aufgelöst wird.
#RequestHeader set X-IES-SCHEME "https"

Counter Konfiguration für einen Virtual-Host, der von verschiedenen CMS-Server geschrieben wird (z.B. für CityCall115).

In der Virtual-Host Konfiguration des Webservers genügt dieser Eintrag für die Weiterleitung der Counter-Aufrufe:

...
 # Alle Counter-Requests an eine vom CMS gepflegte PHP-Seite:
 RewriteRule ^/ies/counter(.*) /counter.php$1 [L,NE]
...

Hier der Inhalt der php Seite 'counter.php' am Beispiel CityCall für Wuppertal/Remscheid/Solingen

<?php
  if (!empty($_GET)) {
    $client = substr(htmlspecialchars($_GET["SYS_CNTR_id"]),0,5);
    $prefix = "";

    // Für den Fall, dass es auch auf Testservern eingesetzt wird
    if (strrpos($_SERVER['SERVER_NAME'],"test")) {
      $prefix = ".test";
    }

    $url = null;

    //
    // Unterscheide anhand der Server- und ClientId des übergebenen 
    // Counter-Artikels die Server für die Weiterleitung

    // Wuppertal
    if ($client === "10237") {
      $url = "http://cms-w".$prefix.".wuppertal.de/ies/infosite/counter";

    // Remscheid
    } else if  ($client === "14638") {
      $url = "http://cms-rs".$prefix.".remscheid.de/ies/infosite/counter";

    // Solingen
    } else if  ($client === "15601") {
      $url = "http://cms-sg".$prefix.".solingen.de/ies/infosite/counter";
    }

    // Die Parameter des Aufrufes ergänzen und die Seite mit einem Timeout (3 bis 5 Sekunden) aufrufen. 
    if ($url !== null) {
      $url .= "?".$_SERVER['QUERY_STRING'];

      $context  = stream_context_create(array("http" => array("timeout" => 3)));
      return file_get_contents($url, NULL, $context);
    }
}
?>