テスト目的で社内マシンに Apache 2.4.6 サーバーをセットアップしています。Apache サーバーが行うべきことの 1 つは、localhost:3030 で見つかった別のサーバーのリバース プロキシとして機能することです。
localhost:3030 上のサーバーは、最初のパス レベルでいくつかのデータセット名のうちの 1 つを想定しています (現時点では、セットは dataset のみで構成されていexperimental
ますが、後で追加される予定です)。要求されたパス。
私の仮想ホストでは、これは機能します:
<Location /experimental/>
ProxyPass http://localhost:3030/experimental/
ProxyPassReverse /
</Location>
experimental
追加のデータセットについては、それをコピーして他のデータセット名に置き換えることができます。明らかに、これは多くのコードの重複/冗長性につながり、エラーの原因とメンテナンスの恐怖の両方になります。
したがって、私はもう少し柔軟になり、複数のデータセットを 1 つのブロックで扱いたいと考えています。LocationMatch
これは、ディレクティブで可能になるはずです。
このコメントとこのページで示されているように、ブロック内で使用する場合は置き換える必要があります。基本的に、ドキュメントは同じことを述べています:ProxyPass
ProxyPassMatch
LocationMatch
同じことが LocationMatch セクション内で発生しますが、ProxyPass は正規表現をそのように解釈しないため、代わりにこの状況では ProxyPassMatch を使用する必要があります。
LocationMatch
ドキュメントは次のように説明しています。
2.4.8 以降では、名前付きグループと後方参照がキャプチャされ、対応する名前の先頭に「MATCH_」と大文字が付けられて環境に書き込まれます。これにより、mod_rewrite などの式やモジュール内から URL の要素を参照できます。混乱を避けるために、番号付けされた (名前のない) 後方参照は無視されます。代わりに名前付きグループを使用してください。
その情報は Apache 2.4.8 の時点でのみ有効です。これがおそらく、私の 2.4.6 インストールで以下が機能しない理由です。
<LocationMatch /(?<dataset>experimental)/>
ProxyPassMatch http://localhost:3030/%{env:MATCH_DATASET}/
ProxyPassReverse /
</LocationMatch>
一方、このページとその投稿は、数値グループ インデックス ( ) を使用できることを暗示しています ($1
ヘルプ テキストは httpd 2.4.8 の時点でのみ有効であるため、数値参照は 2.4.8 より前で機能するのではないかと疑っています/希望しています)。 (?)
いずれにせよ、私はこれを試しました:
<LocationMatch "/(experimental)/">
ProxyPassMatch http://localhost:3030/$1/
ProxyPassReverse /
</LocationMatch>
ただし、ログによると、vhost URLのパスを要求するときではhttp://localhost:3030/$1/
なく、内部呼び出しが呼び出されます。http://localhost:3030/experimental/
experimental
ProxyPassMatch
ドキュメントは次のように言うだけです:
LocationMatch セクション内で使用する場合、最初の引数は省略され、正規表現は LocationMatch から取得されます。
LocationMatch
ただし、このテキストでは、とを組み合わせる方法の例をあえて提供していませんProxyPassMatch
。私は何を間違っていますか?