Mit der Entwicklung des Internets werden immer mehr Anwendungen in der Cloud bereitgestellt. Wie die Sicherheit und Stabilität von Cloud-Diensten gewährleistet werden kann, ist zu einem zentralen Thema geworden. Unter anderem wird Nginx als leistungsstarker Webserver und Reverse-Proxy häufig bei der Bereitstellung und Verwaltung von Cloud-Diensten eingesetzt. In praktischen Anwendungen muss der Zugriff in einigen Szenarien eingeschränkt werden, z. B. bei häufig aufgerufenen IPs, böswilligen Zugriffsanfragen, Zugriffen mit großem Datenverkehr usw. In diesem Artikel wird eine auf Zeitfenstern basierende Zugriffskontrollmethode vorgestellt, um die Sicherheit und Stabilität von Cloud-Diensten zu gewährleisten, indem die Anzahl der Zugriffe innerhalb eines bestimmten Zeitraums begrenzt wird.
1. Was ist ein Zeitfenster?
Zeitfenster bezeichnet eine Methode zur Begrenzung von Ereignissen innerhalb eines bestimmten Zeitraums. Bei der Zutrittskontrolle kann der Zutritt anhand von Zeitfenstern eingeschränkt werden, zum Beispiel: maximal 10 Besuche in 1 Minute, maximal 100 Besuche in 5 Minuten, maximal 1.000 Besuche in einer Stunde usw. Das Zeitfenster kann den tatsächlichen Bedingungen angepasst werden und ist flexibel und anpassbar.
2. Zeitfenster-Zugriffskontrolle im Nginx-Reverse-Proxy
Bevor Sie die Nginx-Zeitfenster-Zugriffskontrolle verwenden, müssen Sie das Modul ngx_http_limit_req_module installieren. Dieses Modul kann die Häufigkeit des Eintreffens von Clientanfragen innerhalb desselben Zeitraums steuern. Normalerweise installieren wir dieses Modul gleichzeitig, wenn es nicht installiert ist. Die Installationsmethode lautet wie folgt:
$ wget http://nginx.org/download/nginx-1.14.0.tar.gz $ tar zxvf nginx-1.14.0.tar.gz $ cd nginx-1.14.0/ $ ./configure --prefix=/usr/local/nginx --add-module=../nginx-limit-req-module-master $ make $ sudo make install
Folgender Inhalt zur Konfigurationsdatei des Nginx-Reverse-Proxys:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server{ ... location /{ limit_req zone=one burst=5; proxy_pass http://backend; } }
In dieser Konfiguration definiert limit_req_zone den Grenzbereich eins, wobei 10 m die Speichergröße ist, die je nach tatsächlichem Bedarf angepasst werden kann. rate=1r/s definiert eine Anfrage pro Sekunde. Limit_req-Zone = ein Burst = 5 wird zum Standort hinzugefügt, was bedeutet, dass, wenn die Anzahl der Anforderungen 1 Sekunde überschreitet, die überschüssigen Anforderungen in der Folgezeit mit einem Spitzenwert von 5 Anforderungen verarbeitet werden.
Nachdem die Konfiguration abgeschlossen ist, können Sie das AB-Tool wie folgt zum Testen verwenden:
$ ab -n 100 -c 10 http://localhost/ This is ApacheBench, Version 2.3 <$Revision: 1807734 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Finished 100 requests
Dieser Befehl bedeutet: 100 Anfragen senden, die Anzahl der Parallelität beträgt 10. Testergebnisse: Wenn 10 Anfragen innerhalb von 1 Sekunde gesendet werden, werden die verbleibenden Anfragen eingeschränkt und ein 429-Fehler wie folgt generiert:
$ ab -n 100 -c 10 http://localhost/ This is ApacheBench, Version 2.3 <$Revision: 1807734 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Finished 100 requests Server Software: nginx/1.14.0 Server Hostname: localhost Server Port: 80 Document Path: / Document Length: 0 bytes Concurrency Level: 10 Time taken for tests: 0.062 seconds Complete requests: 100 Failed requests: 9 (Connect: 0, Receive: 0, Length: 0, Exceptions: 9) Non-2xx responses: 9 Requests per second: 1617.28 [#/sec] (mean) Time per request: 6.173 [ms] (mean) Time per request: 0.617 [ms] (mean, across all concurrent requests) Transfer rate: 0.00 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 0.2 1 1 Processing: 1 5 9.8 3 47 Waiting: 1 5 9.8 3 47 Total: 1 6 9.8 4 47 Percentage of the requests served within a certain time (ms) 50% 4 66% 5 75% 5 80% 6 90% 15 95% 47 98% 47 99% 47 100% 47 (longest request)
3. Zusammenfassung
Bei der Bereitstellung und Verwaltung von Cloud-Diensten ist die Zugriffskontrolle von entscheidender Bedeutung wichtig. Durch die zeitfensterbasierte Zugriffskontrolle im Nginx-Reverse-Proxy kann die Zugriffshäufigkeit effektiv gesteuert werden, um die Sicherheit und Stabilität von Cloud-Diensten zu gewährleisten. Diese Methode kann nicht nur hochfrequente Anfragen begrenzen, sondern auch böswillige Zugriffsanfragen begrenzen und so die Zuverlässigkeit und Sicherheit von Cloud-Diensten effektiv verbessern.
Das obige ist der detaillierte Inhalt vonZeitfensterbasierte Zugriffskontrolle im Nginx-Reverse-Proxy. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!