Nginx verwendet Lua+Redis, um IP dynamisch zu blockieren

Nginx verwendet Lua+Redis, um IP dynamisch zu blockieren

1. Hintergrund

Bei unserer täglichen Website-Wartung stoßen wir häufig auf eine solche Anforderung. Um die Anfragen bestimmter Crawler oder böswilliger Benutzer an den Server zu blockieren, müssen wir eine dynamische IP-Blacklist erstellen. Für IPs auf der schwarzen Liste wird der Dienst verweigert.

Dieser Artikel beschreibt, wie Nginx Lua+Redis verwendet, um IP-Adressen dynamisch zu blockieren. Werfen wir einen Blick auf die ausführliche Einführung.

2. Architektur

Es gibt viele Möglichkeiten, die IP-Blacklist-Funktionalität zu implementieren:

1. Konfigurieren Sie iptables auf Betriebssystemebene so, dass Netzwerkanforderungen von der angegebenen IP-Adresse abgelehnt werden.

2. Konfigurieren Sie auf Webserverebene die IP-Blacklist über die Verweigerungsoption von Nginx oder das Lua-Plug-In.

3. Überprüfen Sie auf Anwendungsebene, ob die Client-IP auf der Blacklist steht, bevor Sie den Dienst anfordern.

Um die Verwaltung und Freigabe zu erleichtern, implementieren wir die IP-Blacklist-Funktion über die Nginx+Lua+Redis-Architektur. Das Architekturdiagramm sieht wie folgt aus:

Architekturdiagramm

3. Umsetzung

1. Installieren Sie das Nginx+Lua-Modul. Es wird empfohlen, OpenResty zu verwenden, einen Nginx-Server, der verschiedene Lua-Module integriert:


OpenResty

2. Installieren und starten Sie den Redis-Server;

3. Nginx-Beispiel konfigurieren:


Nginx-Konfiguration

In

lua_shared_dict ip_schwarze Liste 1m;

Der Nginx-Prozess reserviert einen 1 MB großen gemeinsam genutzten Speicherplatz zum Zwischenspeichern der IP-Blacklist, siehe:

https://github.com/openresty/lua-nginx-module#lua_shared_dict

Zugriff über Lua-Datei lua/ip_blacklist.lua;

Geben Sie den Speicherort des Lua-Skripts an

4. Konfigurieren Sie das Lua-Skript so, dass es regelmäßig die neueste IP-Blacklist von Redis abruft. Den Dateiinhalt finden Sie unter:

https://gist.github.com/Ceelog/39862d297d9c85e743b3b5111b7d44cb


Lua-Skriptinhalt

5. Erstellen Sie eine neue IP-Blacklist vom Typ „Set“ auf dem Redis-Server und fügen Sie die neueste IP-Blacklist hinzu.

Nachdem Sie die obigen Schritte abgeschlossen haben, laden Sie nginx neu und die Konfiguration wird wirksam.

Wenn Ihre IP-Adresse auf der Blacklist steht, wird Ihnen der Zugriff auf den Server verweigert:


Zugriff verweigert

IV. Fazit

Das Obige ist die von Nginx+Lua+Redis implementierte IP-Blacklist-Funktion, die folgende Vorteile bietet:

1. Einfache und leichte Konfiguration mit fast keinen Auswirkungen auf die Serverleistung;

2. Mehrere Server können über Redis-Instanzen Blacklists gemeinsam nutzen.

3. Dynamische Konfiguration: Sie können die Blacklist in Redis manuell oder automatisiert festlegen.

Nun, das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • So blockieren Sie IP und IP-Bereich in Nginx
  • Beispiel für das Blockieren von IPs und Zulassen des Intranet-IP-Zugriffs in nginx

<<:  JavaScript Canvas implementiert Grafiken und Text mit Schatten

>>:  MySQL-Protokolleinstellungen und Anzeigemethoden

Artikel empfehlen

Der IE8-Browser wird vollständig mit Webseitenstandards kompatibel sein

<br />Um zu beweisen, dass sein Engagement f...

JavaScript-HTML zur Implementierung der mobilen Red Envelope Rain-Funktionsseite

In diesem Artikelbeispiel wird der spezifische HT...

Unterschiede und Vergleiche von Speicher-Engines in MySQL

MyISAM-Speicher-Engine MyISAM basiert auf der ISA...

MySQL-Schritte vollständig löschen

Inhaltsverzeichnis 1. Stoppen Sie zuerst den MySQ...

Schauen wir uns einige leistungsstarke Operatoren in JavaScript an

Inhaltsverzeichnis Vorwort 1. Null-Koaleszenzoper...

Detaillierte Erläuterung der Wissenspunkte zum MySQL Strict Mode

I. Erläuterung des strikten Modus Gemäß den Einsc...

CSS- und HTML- und Front-End-Technologie-Schichtendiagramm

Front-End-Technologieschicht (Das Bild ist etwas e...

Gogs+Jenkins+Docker automatisierte Bereitstellung von .NetCore-Schritten

Inhaltsverzeichnis Umgebungsbeschreibung Docker-I...

So verwenden Sie den Linux-Befehl „locate“

01. Befehlsübersicht Der Befehl „locate“ ist eige...