Umfassende Anleitung: NGINX aus dem Quellcode selbst kompilieren
NGINX ist ein leistungsstarkes Werkzeug, das als HTTP/HTTPS-Server, Reverse Proxy, Mail-Proxy, Load Balancer, TLS-Terminierungsstelle oder Caching-Server eingesetzt werden kann. Die modulare Struktur unterstützt sowohl native Module als auch Erweiterungen aus der Community. Da es in C programmiert ist, bietet es hohe Geschwindigkeit bei geringem Ressourcenverbrauch.
NGINX-Versionen im Überblick
NGINX wird parallel in zwei Hauptversionen weiterentwickelt: der Mainline-Version und der stabilen Version. Beide können produktiv eingesetzt werden, wobei die Mainline-Version wegen ihrer Aktualität empfohlen wird.
Überblick: Installation aus dem Quellcode
Die Installation von NGINX aus dem Quellcode ist unkompliziert. Man lädt die aktuellste Version herunter, passt die Konfiguration an, kompiliert den Code und installiert das Ergebnis. In dieser Anleitung wird die Mainline-Version 1.13.2 verwendet. Bei neueren Releases sollten die Versionsnummern entsprechend angepasst werden.
Wichtige Voraussetzungen zur Kompilierung
Erforderliche Komponenten:
- OpenSSL-Bibliothek in der Version zwischen 1.0.2 und 1.1.0
- zlib-Kompressionsbibliothek, Version 1.1.3 bis 1.2.11
- PCRE (Perl Compatible Regular Expressions) in den Versionen 4.4 bis 8.40
- GCC Compiler-Suite
Optionale Komponenten:
- PERL-Unterstützung
- libatomic_ops Bibliothek
- LibGD zur Bildverarbeitung
- MaxMind GeoIP-Bibliothek
- libxml2 XML-Parser
- libxslt XSLT-Prozessor
Erste Vorbereitungen vor der Installation
Vor dem Start der eigentlichen Installation sollten folgende Vorarbeiten durchgeführt werden:
Benutzerkonto mit Sudo-Rechten anlegen
Richte zunächst einen Benutzer ohne Root-Rechte ein, der jedoch administrative Befugnisse besitzt.
Zum neuen Benutzer wechseln
su - <username>
Betriebssystem aktualisieren
sudo yum check-update || sudo yum update -y
NGINX unter CentOS aus Quellcode kompilieren und installieren
Benötigte Entwicklungstools installieren
Installiere zunächst alle nötigen Entwicklerpakete sowie den Texteditor Vim:
sudo yum groupinstall -y 'Development Tools' && sudo yum install -y vim
EPEL-Repository aktivieren
Installiere das Repository „Extra Packages for Enterprise Linux“ (EPEL):
sudo yum install -y epel-release
Optionale Abhängigkeiten installieren
Installiere zusätzliche Pakete, die genutzt werden können:
sudo yum install -y perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel GeoIP GeoIP-devel
NGINX-Quellcode herunterladen und entpacken
Lade die aktuelle Mainline-Version von NGINX herunter und entpacke sie:
wget https://nginx.org/download/nginx-1.13.2.tar.gz && tar zxvf nginx-1.13.2.tar.gz
Benötigte Bibliotheken herunterladen
NGINX setzt auf drei externe Bibliotheken: PCRE, zlib und OpenSSL. Lade deren Quellcode herunter und entpacke sie:
# PCRE Version 8.40
wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz && tar xzvf pcre-8.40.tar.gz
# zlib Version 1.2.11
wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz
# OpenSSL Version 1.1.0f
wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz && tar xzvf openssl-1.1.0f.tar.gz
Archivdateien entfernen
rm -rf *.tar.gz
Ins NGINX-Verzeichnis wechseln und Dateien prüfen
cd ~/nginx-1.13.2
ls
# auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
Man-Seite von NGINX installieren
sudo cp ~/nginx-1.13.2/man/nginx.8 /usr/share/man/man8
sudo gzip /usr/share/man/man8/nginx.8
man nginx
Konfigurationsoptionen anzeigen lassen
./configure --help
./configure --help | grep -F =dynamic
Konfiguration, Kompilierung und Installation
./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--build=CentOS \
--builddir=nginx-1.13.2 \
--with-select_module \
--with-poll_module \
--with-threads \
--with-file-aio \
--with-http_ssl_module \
--with-http_v2_module \
--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_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with-mail=dynamic \
--with-mail_ssl_module \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream_geoip_module=dynamic \
--with-stream_ssl_preread_module \
--with-compat \
--with-pcre=../pcre-8.40 \
--with-pcre-jit \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.0f \
--with-openssl-opt=no-nextprotoneg \
--with-debug
make
sudo make install
Symlink für Module anlegen
Erstelle eine symbolische Verknüpfung vom Modulverzeichnis zur NGINX-Konfiguration:
sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules
Build-Informationen und Version prüfen
sudo nginx -V
NGINX-Benutzer anlegen und Konfiguration validieren
sudo useradd --system --home /var/cache/nginx --shell /sbin/nologin --comment "nginx user" --user-group nginx
sudo nginx -t
sudo mkdir -p /var/cache/nginx && sudo nginx -t
Systemd-Dienstdatei für NGINX erstellen
sudo vim /usr/lib/systemd/system/nginx.service
Füge folgenden Inhalt ein:
[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
NGINX-Dienst starten und aktivieren
sudo systemctl start nginx.service && sudo systemctl enable nginx.service
sudo systemctl is-enabled nginx.service
sudo systemctl status nginx.service
ps aux | grep nginx
curl -I 127.0.0.1
Neustart und Aufräumen
sudo shutdown -r now
sudo rm /etc/nginx/koi-utf /etc/nginx/koi-win /etc/nginx/win-utf
Syntax-Highlighting in Vim aktivieren
mkdir ~/.vim/
cp -r ~/nginx-1.13.2/contrib/vim/* ~/.vim/
Standard-Backup-Konfigurationsdateien entfernen
sudo rm /etc/nginx/*.default
Fazit
Damit ist die Einrichtung abgeschlossen. Du hast nun erfolgreich die neueste NGINX-Version installiert. Diese wurde statisch mit essenziellen Bibliotheken wie OpenSSL kompiliert. Da viele Betriebssysteme veraltete OpenSSL-Versionen mitbringen, bietet dir diese Methode die Möglichkeit, von aktuellen Verbesserungen zu profitieren. Dazu gehören moderne Verschlüsselungsverfahren wie CHACHA20_POLY1305 und neue Protokolle wie TLS 1.3, das mit OpenSSL 1.1.1 eingeführt wird (zum Zeitpunkt dieses Schreibens noch nicht veröffentlicht).