Nginx HTTP-Anforderungsfilterung und Reverse-Proxy-Leistungsanalyse
Nginx ist ein in der Branche weit verbreiteter HTTP-Server und Reverse-Proxy-Server. Aufgrund seines einfachen Designs und seiner hervorragenden Leistung hat er sich zu einer großen Anzahl von Webanwendungen, Cloud-Systemen und Mobilgeräten entwickelt Anwendungen. In praktischen Anwendungen ist Nginx nicht nur für die Verarbeitung und Beantwortung von HTTP-Anfragen verantwortlich, sondern führt auch HTTP-Anfragefilterung und Reverse-Proxying durch. In diesem Artikel wird die Implementierung der HTTP-Anforderungsfilterung und des Reverse-Proxys von Nginx analysiert und Leistungstests und -analysen durchgeführt.
Nginx bietet ein auf regulären Ausdrücken basierendes HTTP-Anfragefiltermodul, das qualifizierte HTTP-Anfragen abfangen kann, um böswillige Anfragen zu filtern oder bestimmte Ressourcen zu schützen. Fügen Sie den folgenden Code zur Nginx-Konfigurationsdatei hinzu, um die HTTP-Anforderungsfilterung zu aktivieren:
http { server { location / { if ($http_user_agent ~* Firefox) { return 403; } ... } } }
Im obigen Code ist $http_user_agent eine integrierte Variable von Nginx, die das User-Agent-Feld im HTTP-Anforderungsheader darstellt eine Übereinstimmung mit einem regulären Ausdruck. Wenn die Firefox-Zeichenfolge übereinstimmt, wird ein 403-Fehler zurückgegeben. Auf diese Weise können wir eine oder mehrere Arten von Anfragen filtern.
Das HTTP-Anforderungsfiltermodul von Nginx bietet auch andere Arten von Variablen und Anweisungen, wie z. B. $http_referer, $request_method, $remote_addr usw., die zur Implementierung einer komplexen Filterung von HTTP-Anforderungen verwendet werden können. Leser können verwandte Dokumente auf In- überprüfen. tiefes Verständnis.
Die Reverse-Proxy-Funktion von Nginx kann den Client-Anfrage-Proxy an den Back-End-Anwendungsserver weiterleiten. Nachdem der Back-End-Anwendungsserver das Ergebnis zurückgegeben hat, gibt Nginx das Ergebnis an den Client zurück Erreichen der Belastung Der Zweck des Ausgleichs und der Verbesserung der Leistung.
Das Folgende ist eine einfache Reverse-Proxy-Konfiguration:
http { upstream myapp { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; location / { proxy_pass http://myapp; } } }
In der obigen Konfiguration definieren wir einen Upstream namens myapp, der zwei Backend-Server angibt, die die Ports 8080 bzw. 8081 überwachen. Im Serverblock überwachen wir Port 80, konfigurieren den Standort / und leiten die Anfrage über die Proxy_pass-Direktive an myapp weiter, und der myapp-Proxy leitet sie an den Backend-Server weiter.
Der Reverse-Proxy von Nginx bietet auch einige erweiterte Strategien, wie z. B. Lastausgleichsalgorithmen, Fehlerbehandlung, Sitzungsstabilität usw. Leser können auf relevante Dokumente verweisen, um mehr zu erfahren.
Anhand der obigen Analyse können wir sehen, dass die HTTP-Anforderungsfilterung und Reverse-Proxy-Funktionen von Nginx sehr leistungsfähig sind, aber in tatsächlichen Anwendungen müssen wir immer noch auf die Leistung achten. Um die Leistung von Nginx zu testen, haben wir das Tool ApacheBench (ab) zum Testen verwendet und Experimente auf einem Ubuntu 20.04-Server durchgeführt.
Zunächst erfolgt der Test der HTTP-Anfragefilterung. Wir setzen das User-Agent-Feld im Anfrageheader auf „Mozilla/5.0“ und senden 1000 Anfragen an den Nginx-Server:
ab -n 1000 -H "User-Agent: Mozilla/5.0" http://localhost/
Die Testergebnisse zeigen, dass Nginx 22,33 Anfragen verarbeiten kann pro Sekunde Anfragen, die durchschnittliche Zeit jeder Anfrage beträgt 44,76 ms, 90 % der Anfragen werden innerhalb von 54 ms abgeschlossen:
Concurrency Level: 1 Time taken for tests: 44.780 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 159000 bytes HTML transferred: 0 bytes Requests per second: 22.33 [#/sec] (mean) Time per request: 44.780 [ms] (mean) Time per request: 44.780 [ms] (mean, across all concurrent requests) Transfer rate: 3.47 [Kbytes/sec] received
Als nächstes kommt der Reverse-Proxy-Test. Wir haben einen einfachen Backend-Server verwendet, um die eigentliche Anwendung zu simulieren, jede Anfrage verarbeitet Die Zeit beträgt 10 ms und Anfragen werden gleichzeitig an zwei Backend-Server initiiert:
http { upstream myapp { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; location / { proxy_pass http://myapp; } } }
ab -n 1000 http://localhost/
Die Testergebnisse zeigen, dass Nginx 966,41 Anfragen pro Sekunde verarbeiten kann, die durchschnittliche Zeit jeder Anfrage 1,03 ms beträgt und 90 % der Anfragen dies tun innerhalb von 2 ms Abgeschlossen:
Concurrency Level: 1 Time taken for tests: 1.034 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 154000 bytes HTML transferred: 0 bytes Requests per second: 966.41 [#/sec] (mean) Time per request: 1.034 [ms] (mean) Time per request: 1.034 [ms] (mean, across all concurrent requests) Transfer rate: 145.42 [Kbytes/sec] received
Aus den Testergebnissen geht hervor, dass Nginx über eine sehr starke Fähigkeit verfügt, HTTP-Anfragen abzufangen und weiterzuleiten, eine große Anzahl von Anfragen verarbeiten und eine hohe Leistung aufrechterhalten kann. Die Leistung von Nginx wird jedoch auch durch Faktoren wie Server-Hardwarefunktionen, Betriebssystemparameter und Nginx-Konfiguration begrenzt, die entsprechend den tatsächlichen Bedingungen in tatsächlichen Anwendungen angepasst und optimiert werden müssen.
Fazit
Dieser Artikel analysiert die HTTP-Anforderungsfilterung und Reverse-Proxy-Funktionen von Nginx, stellt deren Implementierung und Leistung vor und führt einfache Tests und Analysen durch. Als häufig verwendeter HTTP-Server und Reverse-Proxy-Server bietet uns Nginx leistungsstarke Webdienstfunktionen. Leser können je nach tatsächlichem Bedarf und Umgebung verschiedene Nginx-Module und -Parameter auswählen und konfigurieren, um die beste Leistung und Wirkung zu erzielen.
Das obige ist der detaillierte Inhalt vonNginx-HTTP-Anforderungsfilterung und Reverse-Proxy-Leistungsanalyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!