(注意)本記事で書かれた対処法を行う場合には自己責任でお願いいたします。
課題
plex + nginx の運用で特定の IP アドレスを排除したい。
- Plesk + Nginx の運用を行っていて、IP アドレスでのアクセス制限(アクセス拒否)を行いたいのだが、設定ファイルを変更して restart, reload は避けたい。
- nginx からステータスコードとして 444 を返したい
対処法
当初は下記の geoモジュールを使った対処法 による対処を試みたがうまく行かなかった(後述)。
そこで参考文献にも載せた @semind さんの記事 に着想をえて、制限したい IP アドレスのファイルをあるディレクトリに配置して、その存在を確かめることで制限を行うことにした。
if (-e /var/www/ip_blacklist/$remote_addr) {
return 444;
}
この設定を、通常 deny, allow ディレクティブを記述する場所などに書いておき、
/var/www/ip_blacklist/ いかに IP アドレス名 (xxx.xxx.xxx.xxx) の(空でよい)ファイルを置けば 444 を返すことができる。
注意事項
- ファイルをうっかり消してしまうと制限が消えるのでバージョン管理しておくとよい
- もしかすると、制限するIPの数を増やした場合、ファイルの数が多くなってパフォーマンスが落ちるかもしれない(相当多い場合は)。
- 一つの IP に一つのファイルなので、IPの範囲を制限するなどには向かない(検討中、いいアイデアがあれば知りたいです)。
geo モジュールが使える場合
plesk + nginx ではディレクティブの拡張が http ディレクティブ直下にはないので、この方法は使えないようだが、IP + 変数のリストを外部ファイルに書きこんでおいて読み込むことができる(参考文献を参照)。
参考文献
後記
この記事は、自身の最初の投稿記事となるもの(2020/07/04 8:38現在)であり、記事の書き方などに問題があるかもしれないが、一回でも世の中の役に立つことがあればと願う。