web-dev-qa-db-ja.com

HAProxyでURLを制限する正規表現

Haproxy configで下記の設定を使用して、WebアプリのURLを特定の信頼できるIPに正常に制限しました

acl trusted-ip src -f /etc/haproxy/whitelist.lst    
acl protected-page url /abc /abc/    
acl allowed-page url /abc/api/
http-request deny if protected-page !allowed-page !trusted-ip

すべてのユーザーに「/ abc/api」URLにアクセスしてもらいたいのですが、「/ abc」には信頼できるIPだけにアクセスできます。ここでの問題は、信頼されていないIPの誰かが「/ abc?something」と入力した場合、「/ abc」が開くURLです。これを回避するために、設定を次のように変更しました。

acl trusted-ip src -f /etc/haproxy/whitelist.lst
acl protected-page url_reg ^(?!\/abc\/api).*$
http-request deny if protected-page !trusted-ip

これで、上記の問題を解決できましたが、「/ abc/api」には誰もアクセスできません。どんな助けでもありがたいです。

2
Arjun K R

pathの代わりにurlを使用します

これにより、リクエストのURLパスが抽出されます。これは、最初のスラッシュで始まり、疑問符の前で終わります(ホスト部分なし)。典型的な使用法は、プリフェッチ対応のキャッシュ、およびデータベースから複数の情報を集約してそれらをキャッシュに保持する必要があるポータルでの使用です。発信キャッシュでは、代わりに「url」を使用する方が賢明です。 ACLでは、通常、正確なファイル名(例: "/login.php")、または派生フォームを使用したディレクトリ部分を照合するために使用されます。 「url」および「base」フェッチメソッドも参照してください。

ACL derivatives :
  path     : exact string match
  path_beg : prefix match
  path_dir : subdir match
  path_dom : domain match
  path_end : suffix match
  path_len : length match
  path_reg : regex match
  path_sub : substring match
1