Apache 4でホストされている4角形Webアプリケーションがあります。このアプリケーションでは、nodejs javascriptで書かれたAPIを使用しています。ウェブサイトとAPIサービスは、同じマシン上で異なるポート上で実行されています。ウェブサイトはポート80にあり、APIサービスはポート9000でリッスンしています。Apache用のregexの書き方ProxyPassMatchをリバースプロキシAPIコールに変換する
すべてのAPIコールに対してリバースプロキシを実行するようにapacheを設定します。
たとえば、/ api /が含まれているURLはすべてapacheによってAPI url:portを指すように書き換えます。私は次の行のようなProxyPassディレクティブを使用する場合は、リダイレクトが正常に動作します:私は方法がわからない何
ProxyPass "/api/V1/systeminfo" "http://localhost:9000/api/V1/systeminfo"
ProxyPassReverse "/api/V1/systeminfo" "http://localhost:9000/api/V1/systeminfo"
は、ProxyPassMatchディレクティブを使用してように、正規表現を作成することである/ APIが含まれている任意のURL /私は次のことを試してみましたが、それは動作しませんhttp://localhost:9000/api/ .....
にリダイレクトされます。
ProxyPassMatch "^/api.*$" "http://localhost:9000/$1"
ProxyPassReverse "^/api.*$" "http://localhost:9000/$1"
どちらも以下のん:
ProxyPassMatch "^/.*?/api.*?/v[0-9]+/(.*)$" "http://localhost:9000/$1"
ProxyPassReverse "^/.*?/api.*?/v[0-9]+/(.*)$" "http://localhost:9000/$1"
ご協力いただければ幸いです。私の正規表現のスキルは欠けている!
注:明示的に「localhost」はIPアドレスまたはドメインにすることができますが、わかりやすくするために例で使用しています。
多くの感謝!
編集:アレックスのコメントによると*の代わりに。*を使用する最初の例を修正しました。
私は最初の正規表現について気づいたことが2つあります。私はあなたが '^/api。* $'ではなく '^/api * $'を意味すると思います。この期間を出ると、繰り返しiを探していることを意味します。 スラッシュは私が使った正規表現のフレーバーで必要とされるようにバックスラッシュでエスケープされません。私はバックスラッシュもエスケープする必要があると思いますが、私はあなたが扱っているシステムに精通していません。 –
ありがとう、私はあなたが意味することを理解しています。正規表現は現在動作しているようですが、リダイレクトはありません。おそらく、私はProxyPassMatchパラメータの2番目の部分に間違ったことをしています。私は$ 1が表現していることを理解しているかわかりません。 – Dreamlord