
\chapter{Das nginx Paket}

\section{Einleitung}

Dieses Paket stellt den Webserver nginx (Engine X) zur Verf"ugung.
Dabei wird nginx nicht prim"ar als wirklicher Webserver bereitgestellt,
sondern nur die Funktionalit"aten Load Balancer und Reverse Proxy
k"onnen "uber die Eisfair-1 Konfigurationsschicht parametrisiert
werden. Ein echter Webserver kann aber manuell "uber Erstellung der
entsprechenden Konfigurationsdatei realisiert werden.

Die nginx Dokumentation ist unter http://nginx.org/ verf"ugbar.

\section{Funktionen}

Das nginx Paket bietet die M"oglichkeit einen Load Balancer
oder einen Reverse Proxy zu realisieren.

\section{Voraussetzungen}

Das Paket ben"otigt folgendes Paket: libpcre.\\
Es ist auch davon abh"angig, dass eine aktuelle Version des Basissystems
installiert ist.

\section{Installation}

Das nginx Paket wird "uber das Setup-Men"u im Untermen"u ''Package
administration'' installiert.

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

   Das nginx Men"u ist "uber den Men"upunkt ''Service administration''
   des Hauptmen"us im zentralen Setup-Programm zu erreichen.\\
   Es ist wie folgt aufgebaut:

    \mbox {}

    \begin{tabular}{p{2cm}rll}
    & 1. & & View documentaion \\
    & 2. & & View changes \\
    & 3. & & View nginx logfiles \\
    & 4. & & Edit configuration \\
    & 5. & & Advanced configuration file handling \\
    & 6. & & Start nginx \\
    & 7. & & Stop nginx \\
    & 8. & & Restart nginx \\
    & 9. & & Reload nginx configuration \\
    & 10. & & Show nginx status \\
    & 11. & & Test nginx configuration \\
    & 12. & & Edit nginx configuration directly \\
    & 13. & & Check nginx module dependencies \\
    & 0. & & Exit \\
    \end{tabular}


\section{"Anderung der Konfiguration}

   Die Konfiguration kann "uber den Men"upunkt ''Edit Configuration''
   ge"andert werden. Standardm"a"sig wird dabei der Editor genutzt,
   der "uber den Men"upunkt ''Set eisfair configuration editor'' in der
   ''Base configuration'' eingestellt ist.

   Nachdem der Editor beendet wurde wird die Konfiguration mit dem
   eischk-Programm automatisch auf syntaktische und teilweise auch auf
   semantische Fehler gepr"uft. Werden Fehler festgestellt, so werden
   diese gemeldet und der Benutzer zur Korrektur aufgefordert. Wird eine
   solche Korrektur nicht durchgef"uhrt, so kann es zu unvorhersehbaren
   Fehlfunktionen bei dem Dienst kommen.

   Es wird zus"atzlich gefragt, ob die Konfiguration angewendet
   (aktiviert) werden soll. Wird dieses verneint, so unterbleibt die
   Aktivierung.\\

    \achtung{Beim n"achsten Boot-Vorgang kann es in diesem
             Fall zu unvorhersehbaren Fehlern kommen.}

   Wird die Aktivierung best"atigt, werden "uber ein Skript die
   durchgef"uhrten "Anderungen wirksam gemacht. Dazu wird der nginx Dienst
   gestoppt und neu gestartet.

\section{Die Konfigurationsdatei}

    Die Konfigurationsdatei \texttt{(/etc/config.d/nginx)}
    enth"alt in einer Reihe von Abschnitten die Parameter, die den
    Dienst parametrisieren bzw. festlegen, ob der Dienst "uberhaupt
    zur Verf"ugung gestellt wird oder nicht.

\subsection{nginx web server (general settings)}

\begin{description}

\config{START\_NGINX}
{START\_NGINX}
{STARTNGINX}
{
    Legt fest, ob der nginx Server gestartet wird.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{START\_NGINX='no'}
}

\end{description}

\subsection{nginx web server (configuration action settings)}

\begin{description}

\config{NGINX\_MAN\_CONFIG}
{NGINX\_MAN\_CONFIG}
{NGINXMANCONFIG}
{
    Konfiguriere nginx manuell 'yes' oder 'no'.
    Wenn hier der Wert 'yes' gesetzt wird, so wird die nginx Konfigurationdatei
    /etc/nginx/nginx.conf nicht generiert. Der Anwender ist selbst daf"ur
    verantwortlich eine korrekte Konfiguration zu erstellen.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{NGINX\_MAN\_CONFIG='no'}
}

\end{description}

\subsection{nginx web server (general configuration settings)}

\begin{description}

\config{NGINX\_SERVER\_TYPE}
{NGINX\_SERVER\_TYPE}
{NGINXSERVERTYPE}
{
    Server Typ:\\
    \begin{tabular}{p{2cm}lll}
    & reverse\_proxy  & nginx arbeitet als Reverse Proxy \\
    & load\_balancer  & nginx arbeitet als Load Balancer \\
    \end{tabular}

    Eine Konfiguration f"ur den Typ Web-Server wird m"oglichweise in der Zukunft m"oglich sein.
    Man muss NGINX\_MAN\_CONFIG='yes' benutzen, um einen Web-Server konfigurieren zu k"onnen.
    Will man saubere Ergebnisse erhalten, wenn eine Reihe von Hosts beim Load Balancing
    genutzt werden, so muss darauf geachtet werden, dass alle Hosts einen identischen
    Web-Inhalt (web content) haben.

    G"ultige Werte: reverse\_proxy, load\_balancer

    Standardeinstellung: \texttt{NGINX\_SERVER\_TYPE='reverse\_proxy'}
}

\end{description}

\subsection{nginx web server (configuration settings)}

\begin{description}

\config{NGINX\_WORKER\_PROCESSES}
{NGINX\_WORKER\_PROCESSES}
{NGINXWORKERPROCESSES}
{
    Definiert die Anzahl der sog. Worker Prozesse.
    Die optimale Anzahl wird bestimmt durch mehrere Faktoren. Die Anzahl der CPUs spielt eine
    Rolle, stellt aber nicht das Limit dar. Die Anzahl der genutzten Festplatten ist ebenfalls
    mit entscheidend. Die Anzahl der Worker Prozesse auf die Anzahl der verf"ugbaren CPUs zu
    setzen ist ein guter Startwert (der Wert 'auto' versucht die Anzahl eigenst"andig zu ermitteln).

    G"ultige Werte: Zahl oder 'auto'

    Standardeinstellung: \texttt{NGINX\_WORKER\_PROCESSES='auto'}

}

\config{NGINX\_WORKER\_CONNECTIONS}
{NGINX\_WORKER\_CONNECTIONS}
{NGINXWORKERCONNECTIONS}
{
    Dieser Parameter bestimmt die Anzahl gleichzeitiger Verbindungen, die ein Worker Prozess
    "offnen soll. Bitte beachten Sie, dass diese Zahl alle Verbindungen beinhaltet, also auch
    die Verbindungen mit anderen Servern (proxied server) nicht nur die Anzahl Verbindungen
    mit Clients. Eine wichtige Randbedingung ist, dass die Anzahl der gleichzeitigen Verbindungen
    die Anzahl der m"oglichen offenen Dateien nicht "uberschreiten darf (Siehe auch die Variable
    worker\_rlimit\_nofile. Diese wird aber derzeit nicht von der Eisfair-1 Konfigurationsschicht
    unterst"utzt.)

    G"ultige Werte: Zahl

    Standardeinstellung: \texttt{NGINX\_WORKER\_CONNECTIONS='1024'}

}

\config{NGINX\_SERVER\_LISTEN\_N}
{NGINX\_SERVER\_LISTEN\_N}
{NGINXSERVERLISTENN}
{
    Anzahl der zu erzeugenden listen directiven.

    G"ultige Werte: Zahl

    Standardeinstellung: \texttt{NGINX\_SERVER\_LISTEN\_N='1'}
}

\config{NGINX\_SERVER\_LISTEN\_x}
{NGINX\_SERVER\_LISTEN\_x}
{NGINXSERVERLISTENx}
{
    Hier wird die Adresse und der IP-Port oder aber der UNIX-Domain Socket angegeben, auf dem
    der Server Anfragen entgegennimmt. Sowohl Adresse und Port oder nur eine Adresse k"onnen
    angegeben werden. Die Adresse kann auch ein Hostname sein.

    Beispiele: \\
    \begin{tabular}{p{2cm}lll}
    & 127.0.0.1:8000\\
    & 127.0.0.1\\
    & 8000\\
    & *:8000\\
    & localhost:8000\\
    \end{tabular}

    IPv6 Addressen k"onnen in eckigen Klammern angegegeben werden:\\
    \begin{tabular}{p{2cm}lll}
    & [::]:8000\\
    & [::1]\\
    \end{tabular}

    Ein UNIX-domain socket wird wie folgt angegeben:\\
    \begin{tabular}{p{2cm}lll}
    & unix:/var/run/nginx\_sock\\
    \end{tabular}

    Standardeinstellung: \texttt{NGINX\_SERVER\_LISTEN\_='80'}

}

\config{NGINX\_SERVER\_NAME}
{NGINX\_SERVER\_NAME}
{NGINXSERVERNAME}
{
    Name eines virtuellen Servers.
    Bitte die angegebene nginx Dokumentation f"ur weitere Informationen nutzen.

    Standardeinstellung: \texttt{NGINX\_SERVER\_NAME='localhost'}

}

\end{description}

\subsection{nginx web server (log configuration settings)}

\begin{description}

\config{NGINX\_ERROR\_LOG}
{NGINX\_ERROR\_LOG}
{NGINXERRORLOG}
{
    Name des Fehler-Logfiles und Loglevel. Ein relativer Dateiname wird als Dateiname relativ zu
    /var/log/nginx/. interpretiert.\\
    Einen Syslog Server kann man "uber syslog:server=address konfigurieren.\\
    Es ist NICHT m"oglich das Error Logging "uber NGINX\_ERROR\_LOG='off' auszuschalten.

    Standardeinstellung: \texttt{NGINX\_ERROR\_LOG='error.log'}

}

\config{NGINX\_ACCESS\_LOG}
{NGINX\_ACCESS\_LOG}
{NGINXACCESSLOG}
{
    Name des Zugriffs-Logfiles und Format des Logs. Ein relativer Dateiname wird als Dateiname relativ zu
    /var/log/nginx/. interpretiert.\\
    Einen Syslog Server kann man "uber syslog:server=address konfigurieren.

    "Uber NGINX\_ACCESS\_LOG='off' kann das Logging ausgeschaltet werden.

    Standardeinstellung: \texttt{NGINX\_ACCESS\_LOG='access.log'}

}

\config{NGINX\_LOGANON}
{NGINX\_LOGANON}
{NGINXLOGANON}
{
    Hier wird festgelegt, ob die IP-Adressen im Zugriffs-Logfile anonymisiert werden sollen.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{NGINX\_LOGANON='no'}

}

\config{NGINX\_LOGANON\_MODE}
{NGINX\_LOGANON\_MODE}
{NGINXLOGANONMODE}
{
    Diese Konfigrationsvariable wirkt nur auf IPv4 Adressen.\\
    16Bit : erhalte 16 der 32 Bits\\
    Beispiel 192.168.4.16 wird zu 192.168.0.0\\
    24Bit : erhalte 24 der 32 Bits\\
    Beispiel 192.168.4.16 wird zu 192.168.4.0

    G"ultige Werte: 16Bit, 24Bit

    Standardeinstellung: \texttt{NGINX\_LOGANON\_MODE='16Bit'}

}

\config{NGINX\_ROTATE\_LOGS}
{NGINX\_ROTATE\_LOGS}
{NGINXROTATELOGS}
{
    Definiert, ob die Funktionalit"at logrotate benutzt werden soll, um Error Log und Access Log
    rotieren zu lassen.\\
    NGINX\_ROTATE\_LOGS sollte auf 'no' stehen, wenn NGINX\_MAN\_CONFIG='yes' genutzt wird.

    Standardeinstellung: \texttt{NGINX\_ROTATE\_LOGS='yes'}
}

\config{NGINX\_LOGROTATE\_INTERVAL}
{NGINX\_LOGROTATE\_INTERVAL}
{NGINXLOGROTATEINTERVAL}
{
    Definiert das logrotate Intervall.
    Intervall: daily, weekly, monthly

    Standardeinstellung: \texttt{NGINX\_LOGROTATE\_INTERVAL='daily'}
}

\end{description}

\subsection{nginx web server (status information settings)}

\begin{description}

\config{NGINX\_STUB\_STATUS\_LOAD}
{NGINX\_STUB\_STATUS\_LOAD}
{NGINXSTUBSTATUSLOAD}
{
    Soll das Stub Status Modul geladen werden 'yes' oder 'no'.

    Das Stub Status Modul liefert auf einer Webseite Informationen "uber den nginx Server aus.

    Standardeinstellung: \texttt{NGINX\_STUB\_STATUS\_LOAD='no'}
}

\config{NGINX\_STUB\_STATUS\_LOCATION}
{NGINX\_STUB\_STATUS\_LOCATION}
{NGINXSTUBSTATUSLOCATION}
{
    Ort des Stub Status.
    Man kann den Status "uber\\
    http://<servername oder serverip><NGINX\_STUB\_STATUS\_LOCATION>\\
    erreichen.
    Z.B. http://eisgcc.ap.de/basic\_status

    Standardeinstellung: \texttt{NGINX\_STUB\_STATUS\_LOCATION='/basic\_status'}

}

\end{description}

\subsection{nginx reverse proxy (configuration settings)}

\begin{description}

\config{NGINX\_PROXY\_BUFFERING}
{NGINX\_PROXY\_BUFFERING}
{NGINXPROXYBUFFERING}
{
    Freigeben oder Sperren der Nutzung von Puffern f"ur Antworten der via Proxy
    angesprochenen Server. \\
    Werte 'on' oder 'off'.

    Standardeinstellung: \texttt{NGINX\_PROXY\_BUFFERING='off'}

}

\config{NGINX\_PROXY\_PASS\_URL}
{NGINX\_PROXY\_PASS\_URL}
{NGINXPROXYPASSURL}
{
    Setzt das Protokoll und die Adresse des/der via Proxy angesprochenen Server.

    Standardeinstellung: \texttt{NGINX\_PROXY\_PASS\_URL='http://mydestination:80'}
}

\end{description}

\subsection{nginx load balancer (configuration settings)}

\begin{description}

\config{NGINX\_UPSTREAM\_NAME}
{NGINX\_UPSTREAM\_NAME}
{NGINXUPSTREAMNAME}
{
    Name der sog. Upstream Definition.
    Hiermit wird einer Gruppe von Server, die als Ziele f"ur das Load Balancing
    zur Verf"ugung stehen, benannt.

    Standardeinstellung: \texttt{NGINX\_UPSTREAM\_NAME='myupstream'}
}

\config{NGINX\_LB\_SERVER\_N}
{NGINX\_LB\_SERVER\_N}
{NGINXLBSERVERN}
{
    Anzahl der Server in der Upstream Definition.

    Standardeinstellung: \texttt{NGINX\_LB\_SERVER\_N='0'}
}

\config{NGINX\_LB\_SERVER\_x\_ADDRESS}
{NGINX\_LB\_SERVER\_x\_ADDRESS}
{NGINXLBSERVERxADDRESS}
{
    Adresse des x-ten Servers.

    Angabein wie bei NGINX\_SERVER\_LISTEN sind m"oglich.
}

\config{NGINX\_LB\_SERVER\_x\_WEIGHT}
{NGINX\_LB\_SERVER\_x\_WEIGHT}
{NGINXLBSERVERxWEIGHT}
{
    ''Gewicht'' des x-ten Servers.
    Die Server, die als Ziele f"ur das Load Balancing zur Verf"ugung stehen,
    werden in der sog. weighted round-robin balancing Methode angesprochen.
    Ein Gewicht ungleich 1 bedeutet, dass ein Server x-mal pro Durchgang
    angesprochen wird. Hiermit kann die Last ungleichm"a"sig verteilt werden.

    G"ultige Werte: Zahl

    Standardeinstellung: \texttt{NGINX\_LB\_SERVER\_x\_WEIGHT='1'}
}

\config{NGINX\_LB\_SERVER\_x\_MAX\_FAILS}
{NGINX\_LB\_SERVER\_x\_MAX\_FAILS}
{NGINXLBSERVERxMAXFAILS}
{
    Maximale Anzahl Fehler des x-ten Servers.\\
    Anwortet der x-te Server NGINX\_LB\_SERVER\_x\_MAX\_FAILS nicht,
    so wird er als fehlerhaft markiert und NGINX\_LB\_SERVER\_x\_FAIL\_TIMEOUT
    Sekunden nicht mehr benutzt.

    Standardeinstellung: \texttt{NGINX\_LB\_SERVER\_x\_MAX\_FAILS='1'}
}

\config{NGINX\_LB\_SERVER\_x\_FAIL\_TIMEOUT}
{NGINX\_LB\_SERVER\_x\_FAIL\_TIMEOUT}
{NGINXLBSERVERxFAILTIMEOUT}
{
    Fehler Timeout des x-ten Servers in Sekunden.
    Siehe NGINX\_LB\_SERVER\_x\_MAX\_FAILS.

    Standardeinstellung: \texttt{NGINX\_LB\_SERVER\_x\_FAIL\_TIMEOUT='10'}

}

\config{NGINX\_LB\_SERVER\_x\_BACKUP}
{NGINX\_LB\_SERVER\_x\_BACKUP}
{NGINXLBSERVERxBACKUP}
{
    Soll der x-te Server als Backup Server genutzt werden 'yes' or 'no'.
    Ein Backup Server wird f"ur das Load Balancing nur dann genutzt,
    wenn alle anderen Server der Server Gruppe nicht (mehr) antworten.

    Standardeinstellung: \texttt{NGINX\_LB\_SERVER\_x\_BACKUP='no'}
}

\end{description}

\section{Einstellungen beim "Ubersetzen der Packages}

Mit folgenden Einstellungen wurde der nginx "ubersetzt (eigentlich konfiguriert):

\begin{small}
\begin{verbatim}

        --prefix=
        --sbin-path=/sbin/nginx
        --conf-path=/etc/nginx/nginx.conf
        --error-log-path=/var/log/nginx/error.log
        --http-log-path=/var/log/nginx/access.log
        --pid-path=/var/run/nginx.pid
        --lock-path=/var/run/nginx.lock
        --http-client-body-temp-path=/var/lib/nginx/tmp/
        --http-proxy-temp-path=/var/lib/nginx/proxy/
        --http-fastcgi-temp-path=/var/lib/nginx/fastcgi/
        --http-uwsgi-temp-path=/var/lib/nginx/uwsgi/
        --http-scgi-temp-path=/var/lib/nginx/scgi/
        --user=nginx
        --group=nginx
        --modules-path=/var/lib/nginx/modules
        --with-pcre-jit
        --with-http_realip_module
        --with-http_addition_module
        --with-http_xslt_module=dynamic
        --with-http_image_filter_module=dynamic
        --with-http_geoip_module=dynamic
        --with-http_perl_module=dynamic
        --with-http_sub_module
        --with-http_dav_module
        --with-http_flv_module
        --with-http_mp4_module
        --with-http_gzip_static_module
        --with-http_random_index_module
        --with-http_secure_link_module
        --with-http_degradation_module
        --with-file-aio
        --with-http_ssl_module
        --with-http_stub_status_module
        --with-mail=dynamic
        --with-mail_ssl_module
        --with-http_v2_module
        --with-stream=dynamic
        --with-http_auth_request_module
        --with-debug

\end{verbatim}
\end{small}

\section{Erster Test nach Installation von nginx}

    Ein erster lokaler Test von nginx kann durch die Nutzung als
    reiner Webserver erfolgen. Hier sind dann keine weiteren
    Server erforderlich.

    Vorgehensweise:\\
    1.) cd /etc/nginx \\
    2.) cp nginx.conf.default nginx.conf\\
    3.) Konfiguration "andern \\
        START\_NGINX='yes' \\
        NGINX\_MAN\_CONFIG='yes'

    4.) Im Browser \\
        http://<name des eisservers>   oder \\
        http://<ip des eisservers>

    Die sog. Welcome Seite von nginx wird angezeigt:\\
    Welcome to nginx!

