====== NGINX ======
[[https://nginx.org/|Nginx]] (uitgesproken als “engine-x”) is een webserver en
een reverse-proxyserver voor HTTP-, SMTP-, POP3- en IMAP-protocollen,
sterk gericht op hoge prestaties en laag geheugengebruik.
===== Builds =====
Nginx bestaat in 2 smaken: een [[https://nginx.com|commerciële]] en
een [[https://nginx.org|open source]] variant. Wij bieden de open source
smaak aan.
Deze wordt gebouwd in de Major.Medior.Minor formaat (bijv. 1.21.6).
Wij brengen de de images met de volgende speciale tags :
^ Formaat ^ Voorbeeld ^ Uitleg ^
| latest | registry.npohosting.nl/npohosting/nginx:latest | Laatste build van hoogste Major.Medior |
| Major.Medior | registry.npohosting.nl/npohosting/nginx:1.21 | Laatste build van de genoemde Major.Medior |
| Major.Medior.Minor | registry.npohosting.nl/npohosting/nginx:1.21.6 | Specifieke versie release |
Wij adviseren voor projecten om de Major.Medior te gebruiken om zo de
security op peil te houden en na testen de Medior versie te verhogen
wanneer dit nodig is.
===== Versies =====
We onderhouden de meest recente zgn "mainline" release. Op moment van
schrijven is dat 1.21.x. Minor updates releasen we 1x per 4 weken,
tenzij er ernstige security incidenten gevonden worden, dan releasen we
zo snel mogelijk.
===== Gebruik =====
Deze nginx build maakt gebruik van S2I intergratie, dit houd in dat
deze gebruikt kan worden in een Openshift build en je hier code in
kan deployen via een repository en een deploy script.
==== Reverse proxy ====
Zonder gebruik van het build proces is deze image te gebruiken
als reverse proxy, dit kan gedaan worden door in Openshift
een ConfigMap toe te voegen aan de deploy. Deze ConfigMap dient
minimaal een default.conf key te bevatten met de reverse proxy config.
Een voorbeeld voor deze config map is te vinden in onze nginx-phpfpm
template.
==== deploy script ====
Deze image zoekt tijdens het build proces van S2I naar deploy.sh,
deze hoort in de root van de repository te staan. In een deploy-script
kunnen zaken als PHP-Composer worden gebruikt.
==== Webroot ====
De webroot van deze image bevind zich in /var/www/html
==== HTTP Caching ====
Het is mogelijk om caching aan te zetten, hiervoor dienen een aantal
dingen uitgevoerd te worden.
Maak een caching directory aan die in memory leeft, door ervoor te zorgen
dat er in de deployment config onder spec.template.spec het volgende staat
bij volume:
volumes:
- emptyDir:
medium: Memory
name: nginx-cache
- configMap:
defaultMode: 420
name: nginx-confd
name: nginx-confd
- configMap:
defaultMode: 420
items:
- key: nginx.conf
path: nginx.conf
name: nginx-conf
name: nginx-conf
Zet vervolgens onder spec.template.spec.container in de specifieke
container onder volumeMounts:
volumeMounts:
- mountPath: /mnt/nginx-cache
name: nginx-cache
- mountPath: /etc/nginx/conf.d
name: nginx-confd
- mountPath: /etc/nginx/nginx.conf
name: nginx-conf
=== Verhoog de memory limits van de pod ===
Zorg ervoor dat de memory limit van de pod minimaal de hoeveelheid
memory is van de cache + 128MB. Dit kun je in de deploymentconfig
aanpassen onder ''spec.template.spec.container'' in de specifieke container
onder resources:
resources:
limits:
memory: 640Mi
=== Voeg caching regels toe aan nginx config ===
Maak een nginx-conf ConfigMap aan met de key nginx.conf,
deze zit standaard in onze Nginx-php-fpm template. Kijk op
https://nginx.org/en/docs voor verdere uitleg over alle directives
die in een config-file kunnen staan. Zorg dat de volgende regel
boven aan de config staat:
proxy_cache_path /mnt/nginx-cache levels=1:2 keys_zone=cache:10m inactive=24h max_size=350m ;
Maak een nginx-confd ConfigMap aan voor vhost configuratie met minimaal
een default.conf als key. voeg hier in de vhost configuratie het
volgende toe:
proxy_cache cache;
proxy_cache_key $scheme$request_method$host$request_uri;
proxy_cache_revalidate on;
proxy_cache_use_stale error timeout updating;
proxy_cache_background_update on;
proxy_cache_lock on;
add_header X-Proxy-Cache $upstream_cache_status;
add_header X-Proxy-Http-Date $upstream_http_date;