tuning: NGINX Tuning Advisor Modul
Erfordert den Pro-Plan (oder höher) des GetPageSpeed NGINX Extras Abonnements.
Installation
Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:
- RedHat Enterprise Linux 7, 8, 9 und 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 und Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-tuning
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-tuning
Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ngx_http_tuning_module.so;
Dieses Dokument beschreibt nginx-module-tuning v1.2.0, veröffentlicht am 16. Februar 2026.
Datengetriebene NGINX Proxy-Tuning-Empfehlungen aus echtem Traffic
Hören Sie auf, Ihre Puffergrößen zu raten. Dieses Modul beobachtet Ihre tatsächlichen Verkehrsströme und sagt Ihnen genau, was Sie konfigurieren sollen.
Das Problem
Jede NGINX Proxy-Setup-Anleitung sagt Ihnen, dass Sie proxy_buffer_size, proxy_buffers und Timeouts anpassen sollen. Aber welche Werte sollten Sie verwenden?
Der traditionelle Ansatz besteht darin, curl-Befehle gegen Ihre Backends auszuführen:
curl -s -w %{size_header} -o /dev/null https://backend.example.com
Dies gibt Ihnen einen einzelnen Datenpunkt. Ihr echter Traffic hat Tausende von Anfragen pro Minute, jede mit unterschiedlichen Headergrößen, Körpergrößen und Antwortzeiten. Ein einzelnes curl sagt Ihnen nichts über das 95. Perzentil, das upstream sent too big header-Fehler in der Produktion verursacht.
Die Lösung
Dieses Modul sitzt innerhalb von NGINX, beobachtet passiv jede proxied Anfrage und erstellt Histogramme des tatsächlichen Verkehrs. Wenn Sie bereit sind, fragen Sie den /tuning-advisor Endpunkt ab:
{
"sample_size": 847293,
"uptime_seconds": 86400,
"requests_per_second": 9.81,
"proxy_buffer_size": {
"observed": { "avg": "1.8k", "max": "23.4k", "p95_approx": "4.0k" },
"recommendation": "OK",
"suggested_value": "4k",
"reason": "95% der Header passen in 4k"
},
"proxy_buffers": {
"observed": { "avg": "12.3k", "max": "2.1m", "p95_approx": "32.0k" },
"recommendation": "OK",
"suggested_value": "8 4k",
"reason": "Standard 32k (8x4k) ausreichend für 95% der Antworten"
},
"nginx_config": {
"snippet": "proxy_buffer_size 4k;\nproxy_buffers 8 4k;\nproxy_read_timeout 10s;\nclient_body_buffer_size 8k;",
"apply_to": "http, server oder location block"
}
}
Kopieren Sie den Snippet, fügen Sie ihn in Ihre Konfiguration ein, laden Sie neu. Fertig.
Funktionen
Metriksammlung
- Headergrößen der Upstream-Antworten → tune
proxy_buffer_size - Körpergrößen der Upstream-Antworten → tune
proxy_buffers - Antwortzeiten der Upstream → tune
proxy_read_timeout - Körpergrößen der Client-Anfragen → tune
client_body_buffer_size - Verbindungswiederverwendungsraten → optimieren Sie die Keepalive-Einstellungen
- Cache-Treffer-/Verfehlungsraten → bewerten Sie die Effektivität des Proxy-Caches
Leistung
- Lock-freie Atomics — keine Mutexes, keine Konkurrenz zwischen Workern
- Geteilte Speicher — alle Worker tragen zu denselben Zählern bei
- Histogrammbasierte Perzentile — approximieren p95/p99, ohne jeden Wert zu speichern
- Nanosekunden-Overhead — ~10 atomare Inkremente pro Anfrage
Ausgabeformate
- JSON API mit Empfehlungen, Gründen und sofort verwendbaren Konfigurationssnippets
- Prometheus-Metriken zur Integration mit Grafana, Alertmanager und Co.
- Reset-Endpunkt zum Zurücksetzen der Zähler und zum Start neuer Beobachtungsfenster
Schnellstart
load_module modules/ngx_http_tuning_module.so;
http {
# Aktivieren Sie die Sammlung für alle proxied Anfragen
tuning_advisor on;
server {
# Exponieren Sie den Tuning-Endpunkt (Zugriff einschränken!)
location = /tuning-advisor {
tuning_advisor_status;
allow 127.0.0.1;
allow 10.0.0.0/8;
deny all;
}
location / {
proxy_pass http://backend;
}
}
}
Fragen Sie dann ab:
curl http://localhost/tuning-advisor | jq .
Konfigurationsreferenz
tuning_advisor
tuning_advisor on | off;
| Standard | off |
| Kontext | http, server, location |
Aktiviert die Metriksammlung für proxied Anfragen in diesem Kontext.
tuning_advisor_shm_size
tuning_advisor_shm_size 1m;
| Standard | 1m |
| Kontext | http |
Größe des Shared-Memory-Bereichs für die Aggregation von Metriken über Worker hinweg. 1MB ist ausreichend für die festen Zähler und Histogramme.
tuning_advisor_status
tuning_advisor_status;
| Kontext | location |
Aktiviert den Status-Handler. Reagiert auf GET (gibt Metriken zurück), POST (setzt Metriken zurück) und GET mit ?reset (setzt ebenfalls zurück).
API-Referenz
GET /tuning-advisor
Gibt JSON mit beobachteten Metriken, Empfehlungen und einem sofort verwendbaren Konfigurationssnippet zurück.
Antwortstruktur:
| Abschnitt | Beschreibung |
|---|---|
sample_size |
Gesamtzahl der beobachteten proxied Anfragen |
uptime_seconds |
Sekunden seit Beginn der Sammlung (oder letztem Reset) |
requests_per_second |
Durchschnittliche Anfragerate |
proxy_buffer_size |
Headergrößenmetriken und Empfehlung |
proxy_buffers |
Körpergrößenmetriken und Empfehlung |
proxy_read_timeout |
Antwortzeitmetriken und Empfehlung |
client_body_buffer_size |
Anfragekörpermetriken und Empfehlung |
connection_reuse |
Effektivität von Client- und Upstream-Keepalive |
proxy_cache |
Cache-Treffer-/Verfehlungs-/Umgehungsstatistiken |
nginx_config |
Kopieren-Einfügen Konfigurationssnippet |
histograms |
Rohbucket-Zählungen für benutzerdefinierte Analysen |
GET /tuning-advisor?prometheus
Gibt das Prometheus-Expositionsformat zurück:
# HELP nginx_tuning_requests_total Gesamtzahl der beobachteten proxied Anfragen
# TYPE nginx_tuning_requests_total counter
nginx_tuning_requests_total 847293
# HELP nginx_tuning_header_size_bucket Headergrößendverteilung
# TYPE nginx_tuning_header_size_bucket histogram
nginx_tuning_header_size_bucket{le="1024"} 423841
nginx_tuning_header_size_bucket{le="2048"} 712453
nginx_tuning_header_size_bucket{le="4096"} 831029
nginx_tuning_header_size_bucket{le="+Inf"} 847293
Konfigurieren Sie das Scraping für Prometheus:
scrape_configs:
- job_name: nginx-tuning
metrics_path: /tuning-advisor
params:
prometheus: ['1']
static_configs:
- targets: ['nginx:80']
POST /tuning-advisor
Setzt alle Zähler auf null zurück und gibt eine Bestätigung zurück. Nützlich, um ein neues Beobachtungsfenster nach Konfigurationsänderungen zu starten.
GET /tuning-advisor?reset
Dasselbe wie POST — setzt alle Metriken zurück.
Empfehlungslogik
Das Modul analysiert Perzentile und gibt umsetzbare Empfehlungen:
| Metrik | Empfehlung | Wann |
|---|---|---|
proxy_buffer_size |
OK |
p95 Headergröße ≤ 4KB |
INCREASE |
p95 > 4KB (schlägt 8k, 16k oder 32k vor) | |
WARNING |
p95 > 16KB (Untersuchung des Upstreams) | |
proxy_buffers |
OK |
p95 Körpergröße ≤ 32KB |
INCREASE |
p95 > 32KB (schlägt größere Puffer vor) | |
proxy_read_timeout |
CONSIDER_REDUCING |
p99 Antwortzeit < 5s |
OK |
p99 zwischen 5s und 30s | |
WARNING |
p99 > 30s (Backend zu langsam) | |
connection_reuse |
EXCELLENT |
Client ≥ 80% Wiederverwendung, Upstream ≥ 70% |
WARNING |
Niedrige Wiederverwendung (schlägt Keepalive-Tuning vor) | |
proxy_cache |
EXCELLENT |
Trefferquote ≥ 80% |
WARNING |
Trefferquote < 20% |
Histogramme
Das Modul verwendet exponentielle Bucket-Histogramme, um Perzentile zu approximieren, ohne jeden Wert zu speichern:
Größen-Buckets: <1k, 1-2k, 2-4k, 4-8k, 8-16k, 16-32k, 32-64k, >64k
Zeit-Buckets: <10ms, 10-50ms, 50-100ms, 100-500ms, 500ms-1s, 1-5s, 5-10s, >10s
Rohbucket-Zählungen sind im Abschnitt histograms der JSON-Antwort für benutzerdefinierte Analysen verfügbar.
Sicherheitsüberlegungen
Der /tuning-advisor Endpunkt gibt Informationen über Ihre Verkehrsströme preis. Beschränken Sie immer den Zugriff:
location = /tuning-advisor {
tuning_advisor_status;
# Nur von localhost und internem Netzwerk zulassen
allow 127.0.0.1;
allow ::1;
allow 10.0.0.0/8;
allow 172.16.0.0/12;
allow 192.168.0.0/16;
deny all;
# Oder Authentifizierung erforderlich machen
# auth_basic "Tuning Advisor";
# auth_basic_user_file /etc/nginx/.htpasswd;
}
Weiterführende Literatur
- Tuning proxy_buffer_size in NGINX — tiefgehende Analyse der Puffereinstellungen
- NGINX Timeout-Direktiven erklärt — Verständnis aller Timeout-Einstellungen