Der NGINX Reverse Proxy Manager ist eine nützliche Tool Sammlung in Form eines Docker Containers. Das Deployment gestaltet sich als enorm einfach und wir können blitzschnell die ersten Proxy Hosts definieren und den Container als Reverse Proxy verwenden. Wollen wir jedoch bestimmt Konfigurationen individuell anpassen, muss man einige Dinge beachten. Viele Webapplikation verwenden zum Beispiel gzip als Kompression, welche in NGINX manuell aktiviert werden muss.
Anpassungen am Container Deployment erforderlich
Damit wir Snippets von einzelnen Konfigurationselementen für den Container bereitstellen können, müssen wir ein lokales Linux Verzeichnis als Mount bereitstellen. Am einfachsten erstellen wir den Container mittels docker-compose und geben die entsprechenden Volumes an.
---
#...
volumes:
- /srv/nginx-rpm/data:/data
- /srv/nginx-rpm/letsencrypt:/etc/letsencrypt
#...
Die Syntax für die Angabe von Filesystem Volumes gestaltet sich folgendermaßen:
---
#...
volumes:
- <Pfad des lokalen Filesystem>:<Pfad im Container>
- <Pfad des lokalen Filesystem>:<Pfad im Container>
#...
Erklärung der Konfigurationen
Um das Setup besser zu verstehen, sollten wir einmal in den Container springen und uns die NGINX Konfiguration anschauen.
docker exec -it nginx-proxy-manager_app_1 /bin/bash
[root@docker-def72057c4b9:/app]# cat /etc/nginx/nginx.conf | grep include
In dem folgenden Segment sehen wir, welche Dateien von NGINX über das „include“ Statement geladen werden. Wichtig sind uns hier die eingebundenen „proxy_host“ Konfigurationen.
include /etc/nginx/modules/*.conf;
include /etc/nginx/mime.types;
include /etc/nginx/conf.d/include/resolvers.conf;
include conf.d/include/ip_ranges.conf;
include /data/nginx/custom/http_top[.]conf;
include /etc/nginx/conf.d/*.conf;
include /data/nginx/default_host/*.conf;
include /data/nginx/proxy_host/*.conf;
include /data/nginx/redirection_host/*.conf;
include /data/nginx/dead_host/*.conf;
include /data/nginx/temp/*.conf;
include /data/nginx/custom/http[.]conf;
include /data/nginx/stream/*.conf;
include /data/nginx/custom/stream[.]conf;
include /data/nginx/custom/root[.]conf;
Wir können uns jetzt die einzelnen proxy_host Dateien anschauen und sehen dabei, dass in diesen Dateien wieder ein „include“ Statement angegeben ist.
[root@docker-def72057c4b9:/app]# cd /data/nginx/proxy_host/
[root@docker-def72057c4b9:/data/nginx/proxy_host]# ls
1.conf
2.conf
4.conf
6.conf
7.conf
8.conf
[root@docker-def72057c4b9:/data/nginx/proxy_host]# cat 1.conf | grep include
include conf.d/include/letsencrypt-acme-challenge.conf;
include conf.d/include/ssl-ciphers.conf;
include conf.d/include/force-ssl.conf;
include conf.d/include/proxy.conf;
include /data/nginx/custom/server_proxy[.]conf;
gzip Konfiguration
Wir folgen jetzt der „server_proxy[.]conf“ Pfadangabe in unserer proxy_host Datei und legen im Filesystem für unser Volume Mount das entsprechende Snippet File unter „srv/nginx-rpm/data/nginx/custom/server_proxy.conf“ ab. Wir definieren in diesem Snippet unsere gewünschte gzip Konfiguration.
gzip on;
gzip_proxied any;
gzip_types
text/css
text/javascript
text/xml
text/plain
application/javascript
application/x-javascript
application/json;
Jetzt nur noch den Container neu starten, damit die neue Konfiguration geladen wird.
docker restart nginx-proxy-manager_app_1