%
% mini_httpd.tex
% Last Update: $Id$
%
%%%%%%%%%%%%%%%%%%%%%%%%%%% Kapitel Mini_httpd %%%%%%%%%%%%%%%%%%%%%%%%%%%%

\chapter{Das Mini\_HTTPD-Paket}

    Das Mini\_HTTPD-Paket enth"alt einen kleiner HTTP-Server. Seine Performance
    ist nicht gro"sartig, aber f"ur Seiten mit geringem Datenverkehr ist er
    ausreichend.


\section{Die Einleitung}

    Dem Mini\_HTTPD wurden alle Standardfunktionen eines HTTP-Servers
    implementiert, darunter:

    \begin{itemize}
        \item GET, HEAD und POST Methoden
        \item CGI
        \item Basic authentication.
        \item Sicherung gegen `..' Dateischn"uffeln
        \item die allgemeinen MIME Typen
        \item index.html, index.htm, index.cgi (Abrufreihenfolge)
        \item Ordnerinhalt ausgeben
        \item virtuelle Hosts
        \item Standard loggen
        \item benutzerdefinierte Fehlerseiten
        \item SSL/HTTPS und IPv6.
    \end{itemize}

    Mini\_HTTPD wurde aus einer Reihen von Gr"unden programmiert. Zum
    einen als Experiment um zu sehen wie langsam ein alter Webserver
    auf heutigen Betriebssystems sein w"urde. "Uberraschenderweise
    lautet die Antwort `nicht sehr langsam'.
    Auf einem FreeBSD v3.2-System erreicht der Mini\_HTTPD ungef"ahr 90\%
    der Geschwindigkeit des Apache-Webservers. Ein weiterer Grund f"ur
    die Entwicklung des Mini\_HTTPD war, auf einer einfachen Plattform
    mit Webserver-Technologien zu experimentieren, z.B. mit SSL.\\
    Quelle: \url{http://www.acme.com/software/mini\_httpd/}


\section{Die Funktionen}

    Das Mini\_HTTPD-Paket-Paket besteht aus folgenden Komponenten:

    \begin{itemize}
        \item mini\_httpd - Small HTTP server\\
            (\url{http://acme.com/software/mini\_httpd/})
        \item bytes2read - Calculate kiB, MiB, GiB etc. from bytes\\
            (\url{https://www.fli4l.de/}
        \item proccgi - Processing form data in shell CGI scripts\\
            (\url{http://www.fpx.de/fp/Software/})
    \end{itemize}

    Es ist m"oglich zus"atzliche, optionale Module zu installieren.


\section{Die Installation}

    Das Mini\_HTTPD-Paket wird "uber das Setup-Men"u installiert. Wird
    eine "altere Paketversion vorgefunden, so wird diese deinstalliert
    bevor die neuen Programmdateien installiert werden.


\section{Das Men"u im Setup-Programm}

    Das Men"u im Setup-Programm ist wie folgt aufgebaut:

    \begin{itemize}
        \item View documentation: Anzeigen der Dokumentation
        \item Edit configuration: Bearbeiten der Konfiguration
        \item Advanced configuration file handling: Konfigurationen verwalten
        \item Status of Mini\_HTTPD: Status des Webservers anzeigen
        \item Stop Mini\_HTTPD: Webserver anhalten
        \item Start Mini\_HTTPD: Webserver starten
        \item Goto modules: Zum Modulmen"u verzweigen
        \item View log file: Die Logdatei anzeigen
        \item View access log file: Die Zugriffslogdatei anzeigen (optional)
        \item Exit: Untermen"u verlassen
    \end{itemize}

    Die Men"upunkte d"urften selbsterkl"arend sein, da sie keinerlei
    weiteren Eingaben erwarten. Aus diesem Grund wird auf deren Funktion
    nicht weiter eingegangen.


\section{Die Konfigurationsdatei}

    In der Konfigurationsdatei, die "uber das Men"u zug"anglich ist, sind
    folgende Parameter vorhanden; wer sie von Hand editieren will findet
    sie unter \texttt{/etc/config.d/mini\_httpd}.


\section{Die Parameter}

\begin{description}
%% JED - show this description only in the help file
 %  \config{MINI\_HTTPD\_DO\_DEBUG (Optionaler Parameter)}{MINI\_HTTPD\_DO\_DEBUG}{MINIHTTPDDODEBUG}
 %      Um den Debug-Modus zu aktivieren muss diese Parameter
 %      lediglich auf den Wert `yes' gestellt werden, die Einstellung
 %      `no' deaktiviert den Debug-Modus.
 %
 %      G"ultige Werte: yes, no
 %
 %      Standardeinstellung: \texttt{MINI\_HTTPD\_DO\_DEBUG='no'}

    \config{START\_MINI\_HTTPD}{START\_MINI\_HTTPD}{STARTMINIHTTPD}
        Wird der Wert dieses Parameter auf `yes' gestellt, so wird der
        Mini\_HTTPD-Webserver aktiviert, der Wert `no' deaktiviert ihn.

        G"ultige Werte: IP-Adresse

        Standardwert: \texttt{START\_MINI\_HTTPD='no'}

    \config{MINI\_HTTPD\_PORT}{MINI\_HTTPD\_PORT}{MINIHTTPDPORT}
        "Uber diesen Parameter wird der TCP-Port festgelegt, "uber
        welchen auf den Webserver zugegriffen werden soll. Es muss
        darauf geachtet werden, dass der eingestellte Port nicht
        bereits von einem anderen Programm verwendet wird, da dies
        verst"andlicherweise zu Problemen f"uhrt.\\

        \achtung{Wer seinen \eisfair-Server als Router verwendet sollte
                 sicher stellen, dass dieser Port nach au"sen blockiert
                 ist.}

        G"ultige Werte: Zahl

        Standardwert: \texttt{MINI\_HTTPD\_PORT='443'}

    \config{MINI\_HTTPD\_HEADER}{MINI\_HTTPD\_HEADER}{MINIHTTPDHEADER}
        Wird der Wert dieses Parameter auf `yes' gestellt, so wird ein
        Header im Webbrowser angezeigt, der Wert `no' schaltet die
        Anzeige des Headers ab.

        G"ultige Werte: yes, no

        Standardwert: \texttt{MINI\_HTTPD\_HEADER='yes'}

    \config{MINI\_HTTPD\_SSL}{MINI\_HTTPD\_SSL}{MINIHTTPDSSL}
        Wird der Wert dieses Parameter auf `yes' gestellt, so wird die
        Verwendung des SSL-Protokolls f"ur den Zugriff auf die
        Weboberfl"ache aktiviert. Der Wert `no' hingegen erlaubt den
        unverschl"usselten Zugriff auf die Weboberfl"ache.\\

        \hinweis{Bei MINI\_HTTPD\_SSL='yes' ist darauf zu bedenken, dass
                 die Adresse im Webbrowser mit `https://' beginnt.}

        G"ultige Werte: yes, no

        Standardwert: \texttt{MINI\_HTTPD\_SSL='yes'}

    \config{MINI\_HTTPD\_BIND\_HOST}{MINI\_HTTPD\_BIND\_HOST}{MINIHTTPDBINDHOST}
        "Uber diesen Parameter kann ein Hostname festgelegt werden um
        den Zugriff auf den Mini\_HTTPD einzuschr"anken. Wird der Wert
        `none' gesetzt, so wird der Zugriff nicht eingeschr"ankt.

        G"ultige Werte: none, Hostname

        Standardwert: \texttt{MINI\_HTTPD\_BIND\_HOST='none'}

    \config{MINI\_HTTPD\_USER\_N}{MINI\_HTTPD\_USER\_N}{MINIHTTPDUSERN}
        "Uber diesen Parameter wird die Anzahl der Anwender festgelegt,
        welche "uber die folgenden Parameter definiert werden.

        G"ultige Werte: Zahl

        Standardwert: \texttt{MINI\_HTTPD\_USER\_N='1'}

    \config{MINI\_HTTPD\_USER\_x\_ACTIVE}{MINI\_HTTPD\_USER\_x\_ACTIVE}{MINIHTTPDUSERxACTIVE}
        Wird der Wert dieses Parameters auf `yes' gesetzt, so wird der
        zugeh"orige Datensatz aktiviert, `no' deaktiviert ihn.

        G"ultige Werte: yes, no

        Beispiel: \texttt{MINI\_HTTPD\_USER\_1\_ACTIVE='no'}

    \index{MINI\_HTTPD\_USER\_x\_USER}
    \index{MINI\_HTTPD\_USER\_x\_PASS}
    \config{MINI\_HTTPD\_USER\_x\_RIGHTS}{MINI\_HTTPD\_USER\_x\_RIGHTS}{MINIHTTPDUSERxRIGHTS}
        "Uber diese Parameter wird ein Anwendername, ein Kennwort und
        die Zugriffsrechte f"ur den Zugriff auf die Weboberfl"ache,
        pro einen Anwender festgelegt.

        Beispiel:

        \texttt{MINI\_HTTPD\_USER\_1\_USER='admin'\\
                MINI\_HTTPD\_USER\_1\_PASS='admin'\\
                MINI\_HTTPD\_USER\_1\_RIGHTS='all'}

    \config{MINI\_HTTPD\_LOG}{MINI\_HTTPD\_LOG}{MINIHTTPDLOG}
        Wurde der Parameter MINI\_HTTPD\_LOGFILE ungleich `none' gesetzt,
        so kann "uber diesen Parameter festgelegt werden, ob Servermeldungen
        in eine Logdatei geschrieben werden sollen oder nicht.

        G"ultige Werte: yes, no

        Standardeinstellungen: \texttt{MINI\_HTTPD\_LOG='no'}

    \config{MINI\_HTTPD\_LOG\_FILE (Optionaler Parameter)}{MINI\_HTTPD\_LOG\_FILE}{MINIHTTPDLOGFILE}
        Wurde der Parameter MINI\_HTTPD\_LOGFILE ungleich `none' gesetzt,
        so kann "uber diesen Parameter ein Logdateiname, inkl. des
        Verzeichnispfades, angegeben werden. Wird dieser Parameter
        nicht gesetzt, so wird standardm"a"sig die Logdatei
        `/var/log/mini\_httpd.log' verwendet.

        G"ultige Werte: Logdateiname inkl. Pfad

        Beispiel: \texttt{MINI\_HTTPD\_LOG\_FILE='/var/log/mini\_httpd.log'}

    \config{MINI\_HTTPD\_LOG\_COUNT}{MINI\_HTTPD\_LOG\_COUNT}{MINIHTTPDLOGCOUNT}
        Wurde der Parameter MINI\_HTTPD\_LOGFILE ungleich `none' gesetzt,
        so kann "uber diesen Parameter eingestellt werden, wie viele Logdateien
        vorgehalten werden sollen. Wird dieser Wert "uberschritten, so
        wird die "alteste Logdatei gel"oscht.

        G"ultige Werte: Zahl

        Standardeinstellungen: \texttt{MINI\_HTTPD\_LOG\_COUNT='10'}

    \config{MINI\_HTTPD\_LOG\_INTERVAL}{MINI\_HTTPD\_LOG\_INTERVAL}{MINIHTTPDLOGINTERVAL}
        Wurde der Parameter MINI\_HTTPD\_LOGFILE ungleich `none' gesetzt,
        so kann "uber diesen Parameter bestimmt werden in welchen Intervallen
        die Logdateien archiviert werden sollen. Zur Auswahl stehen die
        Schl"usselw"orter\\
        'daily' - t"aglich, 'weekly' - w"ochentlich und 'monthly - monatlich.

        G"ultige Werte: daily, weekly, monthly

        Standardeinstellungen: \texttt{MINI\_HTTPD\_LOG\_INTERVAL='weekly'}
\end{description}

\section{Verschiedenes}

    \begin{itemize}
        \item[1] Wurde der Parameter MINI\_HTTPD\_SSL='yes' gesetzt, so sollte man beim Zugriff
                 mittels Webbrowser der URL unbedingt das Protokoll `https://' voranstellen ;-)

        \item[2] Der Parameter MINI\_HTTPD\_BIND\_HOST wurde vorerst nur zu Testzwecken eingebunden.
    \end{itemize}

