2       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 
   3    <title>2.6. Webserver-Konfiguration</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo 3.5.3: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s05.html" title="2.5. Anpassung der PostgreSQL-Konfiguration"><link rel="next" href="ch02s07.html" title="2.7. Der Task-Server"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.6. Webserver-Konfiguration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s05.html">Zurück</a> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <a accesskey="n" href="ch02s07.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.6. Webserver-Konfiguration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Apache-Konfiguration"></a>2.6. Webserver-Konfiguration</h2></div></div></div><div class="sect2" title="2.6.1. Grundkonfiguration mittels CGI"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1042"></a>2.6.1. Grundkonfiguration mittels CGI</h3></div></div></div><div class="note" title="Anmerkung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Anmerkung]" src="system/docbook-xsl/images/note.png"></td><th align="left">Anmerkung</th></tr><tr><td align="left" valign="top"><p>Für einen deutlichen Performanceschub sorgt die Ausführung
 
   4           mittels FastCGI/FCGI. Die Einrichtung wird ausführlich im Abschnitt
 
   5           <a class="xref" href="ch02s06.html#Apache-Konfiguration.FCGI" title="2.6.2. Konfiguration für FastCGI/FCGI">Konfiguration für FastCGI/FCGI</a> beschrieben.</p></td></tr></table></div><p>Der Zugriff auf das Programmverzeichnis muss in der Apache
 
   6         Webserverkonfigurationsdatei <code class="literal">httpd.conf</code> eingestellt
 
   7         werden. Fügen Sie den folgenden Abschnitt dieser Datei oder einer
 
   8         anderen Datei hinzu, die beim Starten des Webservers eingelesen
 
   9         wird:</p><pre class="programlisting">AliasMatch ^/kivitendo-erp/[^/]+\.pl /var/www/kivitendo-erp/dispatcher.pl
 
  10 Alias /kivitendo-erp/ /var/www/kivitendo-erp/
 
  12 <Directory /var/www/kivitendo-erp>
 
  13  AddHandler cgi-script .pl
 
  14  Options ExecCGI Includes FollowSymlinks
 
  17 <Directory /var/www/kivitendo-erp/users>
 
  19 </Directory></pre><p>Ersetzen Sie dabei die Pfade durch diejenigen, in die Sie vorher
 
  20         das kivitendo-Archiv entpacket haben.</p><div class="note" title="Anmerkung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Anmerkung]" src="system/docbook-xsl/images/note.png"></td><th align="left">Anmerkung</th></tr><tr><td align="left" valign="top"><p>Vor den einzelnen Optionen muss bei einigen Distributionen ein
 
  21           Plus ‘<code class="literal">+</code>’ gesetzt werden.</p><p>Bei einigen Distribution (Ubuntu ab 14.04, Debian ab 8.2) muss
 
  22           noch explizit das cgi-Modul mittels </p><pre class="programlisting">a2enmod cgi</pre><p>
 
  23           aktiviert werden.</p></td></tr></table></div><p>Auf einigen Webservern werden manchmal die Grafiken und
 
  24         Style-Sheets nicht ausgeliefert. In solchen Fällen hat es oft
 
  25         geholfen, die folgende Option in die Konfiguration aufzunehmen:</p><pre class="programlisting">EnableSendfile Off</pre></div><div class="sect2" title="2.6.2. Konfiguration für FastCGI/FCGI"><div class="titlepage"><div><div><h3 class="title"><a name="Apache-Konfiguration.FCGI"></a>2.6.2. Konfiguration für FastCGI/FCGI</h3></div></div></div><div class="sect3" title="2.6.2.1. Was ist FastCGI?"><div class="titlepage"><div><div><h4 class="title"><a name="Apache-Konfiguration.FCGI.WasIstEs"></a>2.6.2.1. Was ist FastCGI?</h4></div></div></div><p>Direkt aus <a class="ulink" href="http://de.wikipedia.org/wiki/FastCGI" target="_top">Wikipedia</a>
 
  27                   [<span class="citation"> FastCGI ist ein Standard für die Einbindung
 
  28           externer Software zur Generierung dynamischer Webseiten in einem
 
  29           Webserver. FastCGI ist vergleichbar zum Common Gateway Interface
 
  30           (CGI), wurde jedoch entwickelt, um dessen Performance-Probleme zu
 
  32                </p></div><div class="sect3" title="2.6.2.2. Warum FastCGI?"><div class="titlepage"><div><div><h4 class="title"><a name="Apache-Konfiguration.FCGI.Warum"></a>2.6.2.2. Warum FastCGI?</h4></div></div></div><p>Perl Programme (wie kivitendo eines ist) werden nicht statisch
 
  33           kompiliert. Stattdessen werden die Quelldateien bei jedem Start
 
  34           übersetzt, was bei kurzen Laufzeiten einen Großteil der Laufzeit
 
  35           ausmacht. Während SQL Ledger einen Großteil der Funktionalität in
 
  36           einzelne Module kapselt, um immer nur einen kleinen Teil laden zu
 
  37           müssen, ist die Funktionalität von kivitendo soweit gewachsen, dass
 
  38           immer mehr Module auf den Rest des Programms zugreifen. Zusätzlich
 
  39           benutzen wir umfangreiche Bibliotheken um Funktionaltät nicht selber
 
  40           entwickeln zu müssen, die zusätzliche Ladezeit kosten. All dies
 
  41           führt dazu dass ein kivitendo Aufruf der Kernmasken mittlerweile
 
  42           deutlich länger dauert als früher, und dass davon 90% für das Laden
 
  43           der Module verwendet wird.</p><p>Mit FastCGI werden nun die Module einmal geladen, und danach
 
  44           wird nur die eigentliche Programmlogik ausgeführt.</p></div><div class="sect3" title="2.6.2.3. Getestete Kombinationen aus Webservern und Plugin"><div class="titlepage"><div><div><h4 class="title"><a name="Apache-Konfiguration.FCGI.WebserverUndPlugin"></a>2.6.2.3. Getestete Kombinationen aus Webservern und Plugin</h4></div></div></div><p>Folgende Kombinationen sind getestet:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Apache 2.4.7 (Ubuntu 14.04.2 LTS) und mod_fcgid.</p></li><li class="listitem"><p>Apache 2.4.18 (Ubuntu 16.04 LTS) und mod_fcgid</p></li><li class="listitem"><p>Apache 2.4.29 (Ubuntu 18.04 LTS) und mod_fcgid</p></li></ul></div><p>Als Perl Backend wird das Modul <code class="filename">FCGI.pm</code>
 
  45           verwendet.</p><div class="warning" title="Warnung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warnung]" src="system/docbook-xsl/images/warning.png"></td><th align="left">Warnung</th></tr><tr><td align="left" valign="top"><p>FCGI-Versionen ab 0.69 und bis zu 0.71 inklusive sind extrem
 
  46             strict in der Behandlung von Unicode, und verweigern bestimmte
 
  47             Eingaben von kivitendo. Falls es Probleme mit Umlauten in Ihrer
 
  48             Installation gibt, muss zwingend Version 0.68 oder aber Version
 
  49             0.72 und neuer eingesetzt werden.</p><p>Mit <a class="ulink" href="http://www.cpan.org" target="_top">CPAN</a> lässt sie
 
  50             sich die Vorgängerversion wie folgt installieren:</p><pre class="programlisting">force install M/MS/MSTROUT/FCGI-0.68.tar.gz</pre></td></tr></table></div></div><div class="sect3" title="2.6.2.4. Konfiguration des Webservers"><div class="titlepage"><div><div><h4 class="title"><a name="Apache-Konfiguration.FCGI.Konfiguration"></a>2.6.2.4. Konfiguration des Webservers</h4></div></div></div><p>Bevor Sie versuchen, eine kivitendo Installation unter FCGI
 
  51           laufen zu lassen, empfiehlt es sich die Installation ersteinmal
 
  52           unter CGI aufzusetzen. FCGI macht es nicht einfach Fehler zu
 
  53           debuggen die beim ersten aufsetzen auftreten können. Sollte die
 
  54           Installation schon funktionieren, lesen Sie weiter.</p><p>Zuerst muss das FastCGI-Modul aktiviert werden. Dies kann
 
  55           unter Debian/Ubuntu z.B. mit folgendem Befehl geschehen:</p><pre class="programlisting">a2enmod fcgid</pre><p>Die Konfiguration für die Verwendung von kivitendo mit FastCGI
 
  56           erfolgt durch Anpassung der vorhandenen <code class="function">Alias</code>-
 
  57           und <code class="function">Directory</code>-Direktiven. Dabei wird zwischen
 
  58           dem Installationspfad von kivitendo im Dateisystem
 
  59           ("<code class="filename">/path/to/kivitendo-erp</code>") und der URL
 
  60           unterschieden, unter der kivitendo im Webbrowser erreichbar ist
 
  61           ("<code class="filename">/url/for/kivitendo-erp</code>").</p><p>Folgender Konfigurationsschnipsel funktioniert mit
 
  62           mod_fastcgi:</p><pre class="programlisting">AliasMatch ^/url/for/kivitendo-erp/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fcgi
 
  63 Alias       /url/for/kivitendo-erp/          /path/to/kivitendo-erp/
 
  65 <Directory /path/to/kivitendo-erp>
 
  67   Options ExecCGI Includes FollowSymlinks
 
  71 <DirectoryMatch /path/to/kivitendo-erp/users>
 
  73 </DirectoryMatch></pre><div class="warning" title="Warnung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warnung]" src="system/docbook-xsl/images/warning.png"></td><th align="left">Warnung</th></tr><tr><td align="left" valign="top"><p>Wer einen älteren Apache als Version 2.4 im Einsatz hat,
 
  74             muss entsprechend die Syntax der Directorydirektiven verändert.
 
  75             Statt</p><pre class="programlisting">Require all granted</pre><p>muß man Folgendes einstellen:</p><pre class="programlisting">
 
  77   Allow from All </pre><p>und statt</p><pre class="programlisting">Require all denied</pre><p>muss stehen:</p><pre class="programlisting">
 
  79   Deny from All </pre></td></tr></table></div><p>Seit mod_fcgid-Version 2.3.6 gelten sehr kleine Grenzen für
 
  80           die maximale Größe eines Requests. Diese sollte wie folgt
 
  81           hochgesetzt werden:</p><pre class="programlisting">FcgidMaxRequestLen 10485760</pre><p>Das Ganze sollte dann so aussehen:</p><pre class="programlisting">AddHandler fcgid-script .fpl
 
  82 AliasMatch ^/url/for/kivitendo-erp/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fpl
 
  83 Alias       /url/for/kivitendo-erp/          /path/to/kivitendo-erp/
 
  84 FcgidMaxRequestLen 10485760
 
  86 <Directory /path/to/kivitendo-erp>
 
  88   Options ExecCGI Includes FollowSymlinks
 
  93 <DirectoryMatch /path/to/kivitendo-erp/users>
 
  96 </DirectoryMatch></pre><p>Hierdurch wird nur ein zentraler Dispatcher gestartet. Alle
 
  97           Zugriffe auf die einzelnen Scripte werden auf diesen umgeleitet.
 
  98           Dadurch, dass zur Laufzeit öfter mal Scripte neu geladen werden,
 
  99           gibt es hier kleine Performance-Einbußen.</p><p>Es ist möglich, die gleiche kivitendo Version parallel unter
 
 100           CGI und FastCGI zu betreiben. Dafür bleiben die Directorydirektiven
 
 101           wie oben beschrieben, die URLs werden aber umgeleitet:</p><pre class="programlisting"># Zugriff über CGI
 
 102 Alias       /url/for/kivitendo-erp                /path/to/kivitendo-erp
 
 104 # Zugriff mit mod_fcgid:
 
 105 AliasMatch ^/url/for/kivitendo-erp-fcgid/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fpl
 
 106 Alias       /url/for/kivitendo-erp-fcgid/          /path/to/kivitendo-erp/</pre><p>Dann ist unter <code class="filename">/url/for/kivitendo-erp/</code>
 
 107           die normale Version erreichbar, und unter
 
 108           <code class="constant">/url/for/kivitendo-erp-fcgid/</code> die
 
 109           FastCGI-Version.</p></div></div><div class="sect2" title="2.6.3. Authentifizierung mittels HTTP Basic Authentication"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1193"></a>2.6.3. Authentifizierung mittels HTTP Basic Authentication</h3></div></div></div><p>
 
 110         Kivitendo unterstützt, dass Benutzerauthentifizierung über den Webserver mittels des »Basic«-HTTP-Authentifizierungs-Schema erfolgt
 
 111         (siehe <a class="ulink" href="https://tools.ietf.org/html/rfc7617" target="_top">RFC 7617</a>). Dazu ist es aber nötig, dass der dabei vom Client
 
 112         mitgeschickte Header <code class="constant">Authorization</code> vom Webserver an Kivitendo über die Umgebungsvariable
 
 113         <code class="constant">HTTP_AUTHORIZATION</code> weitergegeben wird, was standardmäßig nicht der Fall ist. Für Apache kann dies über die
 
 114         folgende Konfigurationsoption aktiviert werden:
 
 115        </p><pre class="programlisting">SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1</pre></div><div class="sect2" title="2.6.4. Weitergehende Konfiguration"><div class="titlepage"><div><div><h3 class="title"><a name="d0e1209"></a>2.6.4. Weitergehende Konfiguration</h3></div></div></div><p>Für einen deutlichen Sicherheitsmehrwert sorgt die Ausführung
 
 116         von kivitendo nur über https-verschlüsselten Verbindungen, sowie
 
 117         weiteren Zusatzmassnahmen, wie beispielsweise Basic Authenticate. Die
 
 118         Konfigurationsmöglichkeiten sprengen allerdings den Rahmen dieser
 
 119         Anleitung, hier ein Hinweis auf einen entsprechenden <a class="ulink" href="http://redmine.kivitendo-premium.de/boards/1/topics/142" target="_top">Foreneintrag
 
 120         (Stand Sept. 2015)</a> und einen aktuellen (Stand Mai 2017) <a class="ulink" href="https://mozilla.github.io/server-side-tls/ssl-config-generator/" target="_top">
 
 121         SSL-Konfigurations-Generator</a>.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s05.html">Zurück</a> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s07.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.5. Anpassung der PostgreSQL-Konfiguration </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.7. Der Task-Server</td></tr></table></div></body></html>