gzip-Komprimierung unter Nginx aktivieren

Bei der Auslieferung einer Webseite, kann der Datenstrom mittels gzip komprimiert werden. Im Endeffekt kommt die Komprimierung der Performanz einer Webseite zu Gute, da weniger Daten ausgeliefert werden müssen. Um die gzip-Komprimierung unter Nginx zu aktivieren, muss die entsprechende Konfigurationsdatei bearbeitet werden:

nano /etc/nginx/nginx.conf

In dieser Konfigurationsdatei findet sich folgender Block:

gzip on;

#gzip_vary on;
#gzip_proxied any;
#gzip_comp_level 6;
#gzip_buffers 16 8k;
#gzip_http_version 1.1;
#gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

Nachdem die auskommentierten Werte wieder einkommentiert wurden, kann Nginx neu gestartet werden:

service nginx restart

Anschließend ist die Komprimierung mittels gzip aktiv.

Zugriff auf MAMP-Logs

MAMP (Mac, Apache, MySQL und PHP) ist ein Paket zum lokalen Betrieb eines Webservers für Test- und Entwicklungszwecke. Neben der ursprünglichen Version für macOS, existiert mittlerweile auch eine Version für Windows. Bei der Entwicklung von Software z.B. einer PHP-Anwendung ist es hilfreich die Logs der einzelnen Bestandteile von MAMP nutzen zu können. Unter macOS befinden sich die Logs in dem Ordner:

/Applications/MAMP/logs/

In diesem Ordner sind eine Reihe von Dateien zu finden. Die einzelnen Logdateien tragen folgende Dateinamen:

/Applications/MAMP/logs/apache_error.log 
/Applications/MAMP/logs/mysql_error_log.err
/Applications/MAMP/logs/nginx_access.log 
/Applications/MAMP/logs/nginx_error.log 
/Applications/MAMP/logs/php_error.log

Die Nginx-Log-Dateien tauchen nur auf, wenn Nginx als Webserver in den Einstellungen von MAMP verwendet wurde. In der Windows-Version befinden sich die Log-Dateien ebenfalls im log-Ordner, welcher sich wiederum im MAMP-Installationsordner befindet.

REST-APIs unter Apache und Nginx betreiben

Eine der wesentlichen Eigenschaften von REST-APIs bzw. RESTful-Webservices ist ihre Adressierbarkeit von Ressourcen. Wenn ich z.B. über eine API verfüge, welche mir Namen generiert, so kann es in dieser API unterschiedliche Ressourcen geben:

GET https://api.example.com/name/german/
GET https://api.example.com/name/polish/

Rufe ich nun eine der beiden Ressourcen mit dem HTTP-Verb GET auf so erhalte ich entweder einen deutschen oder einen polnischen Namen von dieser Beispiel-API. Für den Webserver ergibt sich allerdings das Problem, das der Ordner name und die entsprechenden Unterordner nicht existieren. Das einzige was in diesem Beispiel existiert ist eine index.php-Datei, welche unter der URL:

https://api.example.com/index.php

zu finden ist. Damit die REST-API ordnungsgemäß funktioniert, müssen die entsprechenden Aufrufe zur index.php-Datei umgebogen werden. Bei dem Webserver Apache kann dies über eine .htaccess-Datei mit folgendem Inhalt erledigt werden:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</IfModule>

Diese Datei sollte dabei im gleichen Verzeichnis wie die Datei index.php liegen. Bei Nginx muss stattdessen die Konfiguration der Domain bzw. der Seite angepasst werden. Diese Konfigurationen sind unter /etc/nginx/sites-available/ zu finden. Dort muss folgende Konfiguration hinzugefügt werden:

try_files $uri $uri/ @rewrite;

location @rewrite {
	   rewrite ^/(.*)$ /index.php?_url=/$1;
}

Hinterlegt werden muss die Konfiguration in einem server-Block derselben. In diesem Fall würde die URL bzw. der Aufruf:

GET https://api.example.com/name/german/

intern in die URL:

https://api.example.com/index.php?_url=name/german/

umgeschrieben und vom Webserver geladen. Dadurch landen die Aufrufe wieder bei der Datei index.php und können verarbeitet werden.

Nginx unter macOS mittels Homebrew installieren und nutzen

Nginx wird für gewöhnlich unter Linux genutzt. Für Entwicklungszwecke kann es interessant sein Nginx unter macOS zu betreiben. Zur Installation von Nginx wird Homebrew benötigt. Homebrew ist ein Paketmanager für macOS, mit welchem viele Open-Source-Projekte unter macOS installiert werden können. Ist Homebrew installiert kann Nginx auf dem Terminal mittels:

brew install nginx

installiert werden. Standardmäßig läuft Nginx bei der Installation über Homebrew auf dem Port 8080. Hintergrund ist das der Webserver somit ohne root-Rechte bzw. ohne sudo genutzt werden kann. Wird der Port auf 80 oder generell auf einen Port kleiner 1024 gestellt, werden wieder entsprechende administrative Rechte benötigt. Soll der verwendete Port geändert werden, muss die Konfigurationsdatei angepasst werden:

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

In dieser findet sich folgender Block:

server {
  listen       8080;
  server_name  localhost;

Dort kann anschließend der Port geändert werden. Neben dem Port kann dort die Default-Location geändert werden. Dazu wird der server-Block bzw. dessen Unterblock, der location-Block angepasst:

location / {
  root /Users/seeseekey/Web;
  autoindex on;

Die root-Direktive gibt den Pfad an, welcher über den Webserver ausgeliefert wird. Die Option autoindex sorgt für das entsprechende Directory-Listing, was für Entwicklungszwecke nützlich sein kann. Gestartet und gestoppt werden kann der Service mittels:

brew services start nginx

bzw.

brew services stop nginx

Natürlich kann dies mittels restart in einem Rutsch erledigt werden:

brew services restart nginx

Anschließend kann Nginx mit der veränderten Konfiguration genutzt werden.

ESP8266 auf einem Developer-Board unter macOS in Betrieb nehmen

Der ESP8266 ist ein Mikrocontroller welcher vor allem aufgrund seines Preises und seiner Fähigkeiten sehr beliebt in der Bastlerszene ist. Während er ursprünglich als WLAN-Shield für den Arduino und Konsorten gedacht war, wird er immer öfter direkt genutzt. Das sollte auch nicht verwundern, schließlich sind viele Leistungswerte des ESP8266 einem gewöhnlichen Arduino überlegen. Mittlerweile gibt es vom ESP8266 14 Varianten die von ESP-1 bis ESP-14 durchnummeriert sind.

Das NodeMCU-Board

Der einfache Einstieg gelingt mit gelingt am besten mit einem ESP8266-Entwicklerboard. Diese verfügen meist über NodeMCU. Das NodeMCU-Modul basiert dabei auf einem ESP-12. Da der ESP8266 3,3 Volt benötigt, USB allerdings 5 Volt liefert, löst das Entwicklerboard viele Probleme, da es bereits einen Spannungsteiler an Bord hat. Für die Anbindung per seriellem Interface wird unter macOS ein Treiber benötigt. Dieser kann unter anderem auf GitHub gefunden werden. Nach der Installation des Treibers muss der Entwicklungsrechner neu gestartet werden.

Nach der Treiberinstallation kann die Schnittstelle angesprochen werden

Nach dem Neustart kann die Arduino IDE geöffnet werden. Da das Board nicht von Haus aus unterstützt wird, muss eine weitere Konfiguration für den Board Manager hinzugefügt werden. Dazu öffnet man die Einstellungen der Arduino IDE und wählt dort den Punkt Zusätzliche Boardverwalter-URLs aus. Dort fügt man nun die URL:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

hinzu. Anschließend können die Einstellungen geschlossen werden und der Board Manager geöffnet werden. Im Board Manager wird nun nach ESP8266 gesucht und die entsprechende Unterstützung installiert.

Die Unterstützung für die ESP8266-Boards wird installiert

Nachdem die Unterstützung für das Board installiert wurde, muss das ganze noch korrekt konfiguriert werden. In diesem Beispiel wurden folgende Einstellungen genutzt:

Board: "NodeMCU 1.0 (ESP-12E Module)"
CPU Frequency: "80 MHz"
Flash Size: "4M (3M SPIFFS)"
Upload Speed: "9600"
Port: "/dev/cu.wchusbserial1410"

Als Beispiel-Programm bietet sich das Webserver-Beispiel an. Nachdem das Beispielprogramm in der Arduino IDE gelandet ist, kompiliert und hochgeladen wurde kann der erste Test des ESP8266 durchgeführt werden. Dazu muss im Browser die IP-Adresse des Gerätes oder alternativ die URL: http://esp8266.local aufgerufen werden.