PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : NGINX Reverse Proxy, Dokument nur bei Engpass / Nichterreichbarkeit aus dem Cache?



Elma
13.09.16, 19:26
Hi.

Ich habe einen nginx Server reverse Proxy Server eingerichtet, welcher auf einem kleinen v-Server läuft.

Als Backend Server dient ein Homeserver, der über VDSL angebunden ist.
Auch Node.js und PHP laufen auf dem Homeserver.

Hier die proxy_params


proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_temp_path /tmp/proxy_temp 1 2;
proxy_cache_path /tmp/proxy levels=1:2 keys_zone=my_cache:10m max_size=10m inactive=10m;

proxy_buffering on;
proxy_buffer_size 128k;
proxy_buffers 256 8k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_max_temp_file_size 0;
proxy_read_timeout 30;




hier die Proxy Konfiguration in /sites-available/default


proxy_cache my_cache;
proxy_cache_use_stale error updating timeout invalid_header http_500 http_502 http_503 http_504;
proxy_intercept_errors on;
proxy_cache_valid 200 1s;
proxy_pass http://some-homehosting.dd-dns.de;

proxy_set_header Host $host;



Der nginx cached nun alles, und liefert auch den letzten Cache Stand aus, wenn der Homeserver down ist.
Allerdings liefert er auch dann aus dem Cache, wenn der Server nicht down ist. Wirklich neu Abgerufen wird nur 1 mal pro Sekunde.

Ich hätte nun gerne, dass nginx im Hintergrund bei einer Anfrage immer aktualisiert, wenn dies möglich ist.
Und nur dann, wenn die Leitung überlastet ist, (sprich, wenn tatsächlich innerhalb von ca 3 Sekunde keine Antwort da ist) oder der Homeserver nicht erreichbar ist, erst dann einspringt.

Wie würde man das hinbekommen?

bei proxy_cache_valid ist der kleinste Wert leider 1 Sekunde.

Grüße

marce
13.09.16, 20:23
evtl. brauchts da einen "echten" Cache wie Squid oder Varnish - s. z.B. https://www.varnish-cache.org/docs/4.1/reference/vcl.html#probes

florian0285
13.09.16, 21:21
So wie hier?

https://spin.atomicobject.com/2013/07/08/nginx-load-balancing-reverse-proxy-updated/

marce
13.09.16, 21:56
Hm, die Wünsche des TE kann ich in den Beispielen dort nicht so direkt erfüllt entdecken. Wobei ich zugegebenermaßen gerade nicht zu 100% weiß, wie ngnix in Proxy-Pools verteilt (Afaik RR) und ob er die proaktiv monitored...

florian0285
13.09.16, 22:16
Ich bin jetzt auch kein nginx crack aber sein beschriebenes, erwünschtes Verhalten beschreibt eine Art failover Mechanismus. Das habe ich bei apache schon mal in Verbindung mit nem load balancer gesehen.

Der relevante Part ist, denke ich, upstream und @proxy. Zu upstream gibt es noch nen Parameter backup, der interessant ist.

http://nginx.org/en/docs/http/ngx_http_upstream_module.html

Es ist keine vorgekaute Lösung, sollte dennoch einen anregenden Ansatz für ihn beinhalten. Eigeninitiative ist ja nicht unerwünscht.