====== Vorbereitung des Server II (Apache) ======

**Tipp:** Wenn man Änderungen an der Apache-Konfiguration vorgenommen hat, muss der Webserver neu gestartet werden. Das kann Apache 2 auch ohne, dass alle laufenden Verbindungen (und damit Befragungen) unterbrochen werden.

  * Einen sanften Neustart erzielt man mittels ''apache2ctl graceful'' -- allerdings ist der Server dann für einige Sekunden nicht erreichbar.
  * Eleganter ist eine Prüfung der Konfigurationsdatei und das Neuladen selbiger:\\ ''apache2ctl -t''\\ ''/etc/init.d/apache2 reload''

===== Installationsverzeichnis =====

Ein Webserver zeigt einem Nutzer/Besucher im Idealfall nur das, was der Besucher sehen soll. Vor allem sieht man "von außen" nicht, wo die Daten tatsächlich auf dem Server liegen.

Beim Installationsverzeichnis muss man also unterscheiden, wo dieses Verzeichnis intern liegt (z.B. ///var/www/sosci///) und unter welchem Namen es extern aufgerufen wird (z.B. //%%http://www.domain.tld/survey/%%//). Damit ein Verzeichnis "von außen" via HTTP oder HTTPS sichtbar ist, haben Sie mindestens zwei Möglichkeiten:

  * Option 1: Verwenden Sie ein Verzeichnis im Pfad für Webdokumente. Bei einem Apache-Webserver heißt das Verzeichnis für Webdokumente in der Regel ///var/www// oder ///var/www/html// (Linux), ///apache/htdocs// (Windows), ///webserver/documents// (Macintosh) oder ähnlich. Der genaue Pfad ist ggf. der Apache-Konfiguration (httpd.conf oder darin importierte Dateien) zu entnehmen.
  * Option 2: Geben in der Apache Konfiguration mit der Anweisung ''Alias'' ein beliebiges Verzeichnis auf dem Server frei. Eine entsprechende Anweisung in der Datei ''httpd.conf'' könnte etwa aussehen wie folgt.

<code>Alias /survey "C:/Daten/SoSci"
<Directory "C:/Daten/SoSci">
  AllowOverride All
  Options MultiViews 
  Order allow,deny
  Allow from all
</Directory></code>

**Hinweis:** Das Alias ist erst nach einem Neustart des Servers oder einem Neuladen der Konfiguration verfügbar.


===== Zugriffssteuerung =====

Nutzer, die via HTTP "von außen" auf den Webserver zugreifen, sollen auf die Projektverzeichnisse, das Verzeichnis ''admin/'', ''images/'' u.s.w. zugreifen können -- nicht aber auf die geschützte Dateiablage oder die Konfiguration.

In der Standard-Konfiguration überprüft Apache, ob eine Datei ''.htaccess'' in einem Verzeichnis liegt. Anhand dieser Datei kann SoSci Survey die Zugriffe entsprechend einschränken. __Falls__ Apache allerdings so konfiguriert ist, die ''.htaccess''-Dateien zu ignorieren, ist noch folgende Ergänzung in der Datei ''httpd.conf'' erforderlich.

Die Verzeichnis-Namen (''C:/Daten/SoSci/'') sind natürlich an die jeweilige Installation anzupassen.

<code>
<Directory "C:/Daten/SoSci/inc/">
  Order allow,deny
  deny from all
</Directory>
<Directory "C:/Daten/SoSci/system/">
  Order allow,deny
  deny from all
</Directory>
<Directory "C:/Daten/SoSci/files/">
  Order allow,deny
  deny from all
</Directory>
</code>
===== Verbindungen =====

Auf den Befragungsserver greifen im Idealfall sehr viele Personen gleichzeitig zu. Daher ist es notwendig, dass viele Verbindungen gleichzeitig geöffnet werden können - sind alle Verbindungen belegt, erhalten weitere Nutzer oder auch die Projektverwalter keine Antwort vom Server mehr und entsprechend eine Fehlermeldung des Browsers, der Server sei nicht erreichbar.

Hinzu kommt, dass SoSci Survey ein umfangreiches Paket ist, das auch ein gewisses Maß an Speicher und Rechenzeit benötigt. Dadurch ist die maximale Anzahl an Webserver-Prozessen beschränkt.

Sofern der Server im Betriebsmodus ''worker'' betrieben werden kann, erlaubt dies bei gleicher Speicherausstattung mehr offene Verbindungen. Allerdings ist dafür eine Umstellung vom PHP-Modul auf CGI notwendig: [[http://www.debianroot.de/server/apache2-worker-php-fcgid-fastcgi-suexec-debian-lenny-1004.html|Apache2 Worker mit PHP und fcgid (FastCGI)]]

Für einen Webserver mit 1 GB (4 GB) Arbeitsspeicher haben sich für den Betriebsmodus ''prefork'' folgende Apache-Einstellungen bewährt:

  * ''MaxClients 40'' (50)\\  Erlaubt bis zu 46 Verbindungen gleichzeitig (bei oFb 2.0.00 waren damit auch alle Prozessoren vollauf beschäftigt, dann kostet eine weitere Erhöhung nur mehr Speicher). Hat man mehr Speicher, darf der Wert großzügiger ausfallen. Aber Vorsicht auf einem V-Server: Hier ist der maximale Speicher nicht unbedingt der, den man dauerhaft zur Verfügung hat (s. Script 3 unten).
  * ''MaxSpareServers 16'' (30)\\ Einige unbeschäftigte Server-Prozesse erlauben eine schnelle Reaktion. Ein höherer Wert kann unter Last den Webserver entlasten und kostet nur in inaktiven Zeiten etwas Arbeitsspeicher.
  * ''MaxRequestsPerChild 10000''\\ Die Prozesse werden nach einer Weile (10.000 Zugriffen) neu gestartet, um eventuelle Speicherlecks in PHP abzufangen.
  * ''KeepAlive On''\\ Wenn eine Verbindung zwischen Browser und Server geöffnet bleibt, können Bilder, CSS-, JavaScript-Dateien u.ä. ohne erneuten Verbindungsaufbau abgerufen werden. Dies steigert die Geschwindigkeit mitunter deutlich. Allerdings können über die Verbindung dann zunächst keine weiteren Anfragen bedient werden -- daher sollte man diese Funktion nicht aktivieren, wenn die Server-Slots (''MaxClients'') ohnehin schon knapp bemessen sind.
  * ''KeepAliveTimeout 1''\\  Wichtig: Nach dem Seitenaufbau (der in wenigen Sekunden abgeschlossen sein sollte), wird die Verbindung schnell wieder freigegeben, so lange der Nutzer den Fragebogen ausfüllt.

===== Case-Sensitivität =====

Standardmäßig unterscheidet ein Apache auf einem Linux-System bei Dateinamen zwischen Groß- und Kleinschreibung (case-sensitiv). Das kann zum Problem werden, wenn der Link zum Fragebogen per Hand eingegeben wird und die Teilnehmer nicht auf die Groß-/Kleinschreibung achten.

Hier hilft das Apache-Modul ''[[http://httpd.apache.org/docs/2.2/mod/mod_speling.html|mod_speling]]'', das Apache2 standardmäßig mitbringt. Man aktiviert es mit dem üblichen Befehl:

<code>
(sudo) a2enmod speling
</code>

Damit das Modul auf dem Server auch tatächlich aktiv wird, muss es auch in der Konfiguration noch aktiviert werden. Die folgenden Befehle platziert man sinnvollerweise im ''<Directory>''-Bereich, den man für SoSci Survey angelegt hat (s. oben).

<code>
<IfModule mod_speling.c>
    CheckSpelling on
    CheckCaseOnly on
</IfModule>''
</code>

Die Zeile ''CheckCaseOnly on'' ist optional. Sie beschränkt die Korrektur von Tippfehlern auf Groß-/Kleinschreibung.

Um die Änderungen zu aktivieren, muss die Konfiguration noch neu eingelesen werden.

<code>
sudo /etc/init.d/apache2 reload
</code>

===== Speicher- und Prozessorauslastung kontrollieren =====

Nachfolgend einige Skripte, die bei der Überwachung der Server-Leistung gute Dienste leisten.

==== Logfile zur Prozessorauslastung ====

Dieses Script einfach alle 15 Minuten via Crontab aufrufen:

<file bash log_uptime.sh>
#!/bin/sh
# /usr/bin/uptime >> /var/log/uptime.log
uptime=`/usr/bin/uptime`
date=`date -I`
echo $date $uptime >> /var/log/uptime.log
</file>

==== RAM-Speicher protokollieren ====

Via Crontab einmalig beim Server-Neustart (@reboot) aufrufen

<file bash log_mem.sh>
#!/bin/sh
date=`date +"%Y-%m-%d %H:%M:%S"`
echo "" >> /var/log/vmstat.log
echo $date >> /var/log/vmstat.log
/usr/bin/vmstat -n 300 >> /var/log/vmstat.log &
</file>

==== RAM-Speicher auf VPS ====

Zum Überprüfen des verfügbaren RAM-Speichers auf einem V-Server (Script 3).

Quelle: [[http://devnulled.com/content/2007/06/how-to-display-linux-vps-memory-usage/| devnulled]].

<file bash memory.sh>
#!/bin/bash
bean=`cat /proc/user_beancounters`
guar=`echo "$bean" | grep vmguar | awk '{ print $4;}'`
burst=`echo "$bean" | grep privvm | awk '{ print $5;}'`
priv=`echo "$bean" | grep privvm | awk '{ print $2;}'`
privmax=`echo "$bean" | grep privvm | awk '{ print $3;}'`
let total=guar/256
let used=priv/256
let max=privmax/256
let burst=burst/256
echo "VPS memory usage:"
echo "Used: $used MB (max $max MB)"
echo "Total: $total MB"
echo "Burstable to: $burst MB"
</file>