ホームページ  >  記事  >  データベース  >  Nginx が Lua+Redis を使用して IP を動的に禁止する方法

Nginx が Lua+Redis を使用して IP を動的に禁止する方法

WBOY
WBOY転載
2023-05-26 10:50:541857ブラウズ

1. 背景

Web サイトの日常的なメンテナンスでは、このような要件に遭遇することがよくありますが、特定のクローラーや悪意のあるユーザーがサーバーを要求するのをブロックするには、次のことを行う必要があります。動的 IP ブラックリストを確立します。ブラックリストにある IP の場合、サービスは拒否されます。

2. アーキテクチャ

IP ブラックリスト機能を実装するにはさまざまな方法があります:

1. オペレーティング システムでレベル、指定された IP へのネットワーク要求を拒否するように iptables を構成します;

2. Web サーバー レベルで、nginx 独自の拒否オプションまたは lua プラグインを介して IP ブラックリストを構成します;

3.アプリケーション レベルで、サービスを要求する前に、クライアント IP がブラックリストに含まれているかどうかを確認します。

管理と共有を容易にするために、nginx lua redis アーキテクチャを通じて IP ブラックリスト機能を実装します。アーキテクチャ図は次のとおりです:

Nginx が Lua+Redis を使用して IP を動的に禁止する方法

##アーキテクチャ図


3. 実装

1. nginx lua モジュールをインストールします。さまざまな lua モジュールを統合する nginx サーバーである openresty を使用することをお勧めします。

Nginx が Lua+Redis を使用して IP を動的に禁止する方法openresty

2. Redis サーバーをインストールして起動します;

3. nginx の設定例:

Nginx が Lua+Redis を使用して IP を動的に禁止する方法nginx 構成

#lua_shared_dict ip_blacklist 1m;

nginx プロセスは、IP ブラックリストをキャッシュするために 1m の共有メモリ空間を割り当てます。リストについては、次を参照してください。

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

access_by_lua_file lua/ip_blacklist.lua;

#場所を指定してくださいlua スクリプトの

#4. lua スクリプトを設定し、redis から最新の IP ブラックリストを定期的に取得します。ファイルの内容については、

https://gist.github.com/ceelog を参照してください。 / 39862d297d9c85e743b3b5111b7d44cb

##lua script content

5. Redis サーバー上に新しいセット タイプ データ ip_blacklist を作成し、最新の IP ブラックリストを追加します。

Nginx が Lua+Redis を使用して IP を動的に禁止する方法上記の手順を完了した後、nginx をリロードすると、設定が有効になり始めます

この時点で、サーバーにアクセスします。IP アドレスがブラックリストにある場合は、アクセスが拒否されます: ## # #########アクセスが拒否されました######

以上がNginx が Lua+Redis を使用して IP を動的に禁止する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。