1. 背景 日常的なウェブサイトのメンテナンスでは、このような要件に頻繁に遭遇します。特定のクローラーや悪意のあるユーザーによるサーバーへのリクエストをブロックするには、動的 IP ブラックリストを確立する必要があります。ブラックリストに登録された IP の場合、サービスは拒否されます。 この記事では、Nginx が Lua+Redis を使用して IP アドレスを動的にブロックする方法を紹介します。詳しい紹介を見てみましょう。 2. 建築 IP ブラックリスト機能を実装する方法は多数あります。 1. オペレーティング システム レベルで、指定された IP アドレスからのネットワーク要求を拒否するように iptables を構成します。 2. Web サーバー レベルで、Nginx 独自の拒否オプションまたは Lua プラグインを使用して IP ブラックリストを設定します。 3. アプリケーション レベルで、サービスを要求する前にクライアント IP がブラックリストに登録されているかどうかを確認します。 管理と共有を容易にするために、Nginx + Lua + Redis アーキテクチャを通じて IP ブラックリスト機能を実装します。アーキテクチャ図は次のとおりです。 アーキテクチャ図 3. 実装 1. Nginx + Lua モジュールをインストールします。さまざまな Lua モジュールを統合した Nginx サーバーである OpenResty を使用することをお勧めします。
2. Redis サーバーをインストールして起動します。 3. Nginx の例を設定します。
で
Nginx プロセスは、IP ブラックリストをキャッシュするために 1M の共有メモリ領域を割り当てます。以下を参照してください。 lua_shared_dict モジュール
luaスクリプトの場所を指定する 4. Redis から最新の IP ブラックリストを定期的に取得するように Lua スクリプトを設定します。ファイルの内容については、以下を参照してください。 出典: github.com
5. Redis サーバーに新しい Set タイプのデータ ip_blacklist を作成し、最新の IP ブラックリストを追加します。 上記の手順を完了したら、nginx をリロードすると設定が有効になります。 IP アドレスがブラックリストに登録されている場合、サーバーにアクセスするとアクセスが拒否されます。
IV. 結論 上記はNginx+Lua+Redisで実装されたIPブラックリスト機能であり、次のような利点があります。 1. シンプルで軽量な構成で、サーバーのパフォーマンスにほとんど影響を与えません。 2. 複数のサーバーが Redis インスタンスを通じてブラックリストを共有できます。 3. 動的構成: Redis のブラックリストを手動または自動で設定できます。 さて、以上がこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: JavaScript キャンバスは影付きのグラフィックとテキストを実装します
インターネット上のインストール情報は不均一で、落とし穴だらけです。インストールにはかなりの労力がかか...
目次1. 基本的なイベント処理2. 親コンポーネントにカスタムイベントを送信するマウス修飾子4. キ...
最近、Yahoo の 34 の黄金律を読み、ウェブサイトのパフォーマンスを最適化する方法を学びました...
オペレーティング システム win10 MySQL は、公式 Web サイトからダウンロードした 6...
目次1. インストール2. プロジェクトにインポートしてマウントする3. 使用Vue2.x はコンポ...
MySQL ショートリンクの設定方法1. mysql 接続番号ステートメントコマンドを確認します。 ...
最近、Docker がコンテナの起動時に特定のプロセスを直接実行できるようにする方法を調べていたとこ...
目次依存関係をインストールするブーストをインストールMySQLをコンパイルしてインストールする構成依...
今日、3年生から質問がありました。彼が書いた HTML コードを開くと、文字化けした文字が表示されま...
6つの効果実装コードhtml <h1>CSS 境界遷移</h1> <セ...
序文当社の MySQL オンライン環境のほとんどはバージョン 5.7.18 を使用しています。このバ...
元の派生コマンド: bin/sqoop インポート -connect jdbc:mysql://19...
MySQLは独立した書き込み分離を設定します。コードに次のものを書くと問題が発生する可能性があります...
<div align="center"> <table sty...
はじめに: MySQL では、CONCAT() 関数を使用して複数の文字列を 1 つの文字列に連結し...