Nginx は、高性能 Web サーバーおよびリバース プロキシ サーバー ソフトウェアです。 Linux、Windows、FreeBSD などのさまざまなオペレーティング システム上で実行できるオープン ソース ソフトウェアです。 Nginx は、リバース プロキシ、負荷分散、HTTP キャッシュ、セキュリティ認証、その他のシナリオで一般的に使用されます。リバース プロキシ シナリオでは、Nginx はユーザー リクエストを複数のバックエンド サーバーに転送して、システムのパフォーマンスと信頼性を向上させることができます。この記事では、Nginx リバース プロキシでユーザーの動作に基づいて ACL を構成する方法を紹介します。
ACL とは Access Control List の略で、アクセス制御に使用される技術です。ネットワークでは、ACL テクノロジーはファイアウォール、ルーター、プロキシ サーバー、その他の機器で広く使用されています。 ACL は、IP アドレス、ポート番号、プロトコル タイプなどのさまざまな条件に基づいてユーザー アクセスを制限または許可できます。 Nginx リバース プロキシでは、ACL はユーザーのリクエストの特性に基づいてリクエストの転送を制限または許可できます。
Nginx の ACL 設定構文は次のとおりです:
location / { # allow或deny用于定义访问控制规则,如: allow ip; # 允许IP地址访问 deny ip; # 禁止IP地址访问 allow all; # 允许所有访问 deny all; # 禁止所有访问 }
その中で、ip は単一の IP アドレス、IP アドレス セグメント、または次のような CIDR 形式の IP アドレスです。 ##
allow 192.168.1.1; # 允许单个IP地址访问 allow 192.168.0.0/16; # 允许IP地址段访问 allow 192.168.1.0/24; # 允许CIDR格式的IP地址访问IP に加えて、ACL はアドレスに加えて、HTTP リクエスト ヘッダー、リクエスト メソッド、リクエスト パスなどの他の条件もサポートします。 Nginx リバース プロキシでは、HTTP リクエスト ヘッダーはユーザーの行動特性を表す可能性があるため、特に重要です。 最新の Web アプリケーションでは、ユーザーの動作特性がますます複雑になっており、アクセス制御のためにより柔軟でインテリジェントな ACL 構成が必要になっています。たとえば、ユーザーのログイン状態、リクエストの頻度、リクエストのソースなどの要因に基づいて、リクエストの転送を制限または許可する必要がある場合があります。 Nginx では、次の方法でユーザーの行動に基づいた ACL 構成を実装できます。
location / { if ($http_user_agent ~* MSIE) { deny all; } allow all; }上記の設定は、User-Agent に「MSIE」が含まれるすべてのユーザーがアクセスを禁止され、その他のユーザーはアクセスが許可されることを意味します。
location /protected { if ($http_cookie !~* "access_token=.*") { return 401; # 请求未携带access_token } allow all; }上記の構成は、リクエストに「access_token」フィールドが含まれていない場合は 401 エラーが返され、そうでない場合はすべてのユーザーがアクセスを許可されることを意味します。
http { # 定义限制访问频率的配置 limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s; # 定义反向代理配置 server { location /api/ { limit_req zone=api burst=20 nodelay; proxy_pass http://api.example.com/; } } }上記の設定は、各 IP アドレスが /api/ パスに 1 秒あたり最大 10 回アクセスでき、20 回のバースト アクセスが許可されることを示しています。ユーザーのアクセス頻度が制限を超えると、503 エラーが返されます。
http { # 定义IP地址库文件 geoip_country /usr/share/GeoIP/GeoIP.dat; # 定义反向代理配置 server { location / { # 根据请求IP的国家代码进行访问控制 if ($geoip_country_code != CN) { deny all; } proxy_pass http://proxy.example.com/; } } }上記の設定は、要求された IP が存在する国が中国でない場合、アクセスが禁止されることを意味します。ドメイン名に基づいてアクセスを制御する必要がある場合は、geoip_host ディレクティブを使用できます。 つまり、Nginx の ACL 構成は非常に柔軟かつ強力で、さまざまなニーズに応じてユーザーの行動に基づいてアクセス制御を実装できます。 ACL を使用する場合は、if ステートメントを乱用しないように注意する必要があります。if ステートメントは Nginx のパフォーマンスと安定性に影響を与えるためです。 ACL 設定を実装するには、できる限り Nginx の組み込み命令と変数を使用することをお勧めします。同時に、ACL 設定がシステム パフォーマンスに与える影響を最小限に抑えるために、実際の条件に基づいてパフォーマンス テストと最適化を実行する必要もあります。
以上がNginx リバース プロキシでのユーザーの動作に基づく ACL 構成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。