クライアントをIPでブロックするnginxモジュールを作成したいとします。 これを行うには、初期化段階で私はIPアドレスが (ブラックリスト)をブロックしてモジュールのコンテキストに格納するファイルを読み込みます。nginxのモジュールランタイムの内部状態を更新するには?
これで、nginxを再起動せずにブラックリストを更新したいと考えています。 可能な解決策の1つは、特定の場所にハンドラを追加することです。例: uri "/block/1.2.3.4"が要求された場合、私のハンドラはIPアドレス1.2.3.4をブラックリストに追加します。
しかし、nginxは複数のワーカーを分離したプロセスとして実行するため、特定のワーカーのみが更新されます。
このような問題に対処する共通のパターンは何ですか?
ブラックリストをモジュールのコンテキスト外に移動できますか?おそらく、システムファイル、KVストア、またはSHMに?これにより、各プロセスが中央のソースブラックリストと対話できるようになります。 – avip
しかし、私はこの共有メモリにもアクセスするための同期メカニズムが必要です。これにより、すべてのシステムが遅くなる可能性があります。 –
はい、私は 'shmat()'と信じていますが、futexはその仕事を行い、オーバーヘッドは無視できます。 – avip