NGINX unter FreeBSD installieren

NGINX ist ein leistungsstarker Edge-Webserver mit dem geringsten Speicherbedarf und die wichtigsten Funktionen zum Aufbau einer modernen und effizienten Webinfrastruktur.

Anbei eine kurze Beschreibung wie der NGINX Webserver unter FreeBSD installiert wird.

pkg install nginx

service nginx enable

service nginx start

Als nächstes wird folgendes Verzeichnis erstellt, wo die Virtual Hosts Dateien gespeichert werden.

mkdir /usr/local/etc/nginx/vhosts/

Damit die vhost eingebunden werden, müssen wir noch unsere nginx.conf am Ende des http Blocks um diese Zeile ergänzen:

nano /usr/local/etc/nginx/nginx.conf => 

include /usr/local/etc/nginx/vhosts/*;

Gzip-Komprimierung

Mit der Gzip-Komprimierung können wir Dateien verkleinern und so den Zeitaufwand für die Übertragung einer Ressource vom Server an einen Browser verringern. In der heutigen Webumgebung unterstützen viele Browser und Server die Gzip-Komprimierung. Die Möglichkeit, die Dateigröße um bis zu 70% zu reduzieren, ist ein großer Anreiz, diese Komprimierungsmethode zu nutzen. Die Aktivierung der Gzip-Komprimierung wird von den Tools für Website-Geschwindigkeitstests als Empfehlung mit hoher Priorität angesehen, da wir ohne diese Option die Ladezeit unserer Webseite unnötig verlängern.

Um die Gzip-Komprimierung zu aktivieren, werden wir die Datei /usr/local/etc/nginx/nginx.confbearbeiten und fügen Folgendes im server Block ein:

gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types application/javascript application/rss+xml application/vnd.ms-fontobject application/x-font application/x-font-opentype application/x-font-otf application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/opentype font/otf font/ttf image/svg+xml image/x-icon text/css text/javascript text/plain text/xml;

Anschließend starten wir NGINX neu: service nginx restart

Wir können es mit curl testen ob die Komprimierungsmethode funktioniert:

curl -H 'Accept-Encoding: gzip' -I https://<webseite>

HTTP/1.1 200 OK
Server: nginx/1.16.0
Date: Sun, 18 Aug 2019 19:38:45 GMT
Content-Type: text/html; charset=utf-8
Last-Modified: Sun, 18 Aug 2019 18:27:06 GMT
Connection: keep-alive
ETag: W/"5d59987a-39e7"
Content-Encoding: gzip

Brotli-Komprimierung

Die Brotli-Komprimierung ist ein neuer Open-Source-Komprimierungsalgorithmus, der von Google entwickelt wurde, um die Dateigröße weiter zu reduzieren. Google veröffentlichte 2013 einen anderen Komprimierungsalgorithmus mit dem Namen Zopli, um eine „sehr gute, aber langsame Deflate- oder Zlib-Komprimierung“ durchzuführen. Basierend auf einer bei Google durchgeführten Komprimierungsalgorithmus-Studie konnte Brotli mit einer um 20 bis 26% höheren Komprimierungsrate im Vergleich zu Zopli eine deutlich schnellere Leistung erzielen.

Damit die Brotli-Komprierung funktioniert, müssen wir nginx entweder aus den Sourcen oder per Poudriere bauen.

Um die Brotli-Komprimierung zu aktivieren, werden wir die Datei /usr/local/etc/nginx/nginx.confbearbeiten und fügen Folgendes im server Block ein:

brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/vnd.microsoft.icon image/bmp image/svg+xml;

Und am Anfang der Konfigurationsdatei:

load_module  /usr/local/libexec/nginx/ngx_http_brotli_filter_module.so;
load_module  /usr/local/libexec/nginx/ngx_http_brotli_static_module.so;

Anschließend starten wir NGINX neu: service nginx restart

Wir können es mit curl testen ob die Komprimierungsmethode funktioniert:

curl -H 'Accept-Encoding: br' -I https://<webseite>

HTTP/1.1 200 OK
Server: nginx/1.16.0
Date: Sun, 18 Aug 2019 19:38:45 GMT
Content-Type: text/html; charset=utf-8
Last-Modified: Sun, 18 Aug 2019 18:27:06 GMT
Connection: keep-alive
ETag: W/"5d59987a-39e7"
Content-Encoding: br

Certbot

Um SSL Zertifikate von Let’s Encrypt zu erstellen und automatisch für NGINX bereitzustellen, werden wir die beiden Pakete py-certbot und py-certbot-nginx mit folgendem Befehl installieren:

pkg install py27-certbot py27-certbot-nginx

Anschließend kann mit dem Befehl certbot automatisch SSL-Zertifikate für alle Domains die in etc/hosts erstellt werden. Mit der Anweisung certbot renew können die abgelaufenen Zertifikate automatisch aktualisiert werden.

Per cronjob wird jede Nacht überprüft, ob die Zertifikate aktuell sind oder ob sie erneuert werden müssen. In der /etc/crontab wird Folgendes eingetragen:

30      23      *       *       *       root    certbot renew