web-dev-qa-db-ja.com

Apache:正規表現を使用して内部URLをプロキシする

外部からアクセスできない内部ポートをリッスンしているサーブレットがいくつかあります。私はApacheのProxyPassおよびProxyPassReverseディレクティブを使用して、ポート443からそれらを安全に提供します。

ProxyPass         /media http://localhost:9002/
ProxyPassReverse  /media http://localhost:9002/

これは正常に機能します-https://example.com/mediahttp://localhost:9002/から提供されます。

この問題は、URLの一部が異なる場合に発生します。例えば:

https://example.com/image/IMAGE_NAME_1http://localhost:9002/image/IMAGE_NAME_1から提供する必要があります。

また、https://example.com/image/IMAGE_NAME_2http://localhost:9002/image/IMAGE_NAME_1から提供する必要があります。

私は次のようないくつかのバリエーションを試しました:

RewriteEngine  on
RewriteRule   ^/image/(.*)$  http://localhost:9002/image/$1 [L,PT]
ProxyPass         /image/ http://localhost:9002/image
ProxyPassReverse  /image/ http://localhost:9002/image

ただし、この構成では、ブラウザにBad Requestが表示されます。

Invalid URI in request GET /image/1 HTTP/1.1

ログで。

RLの一部が異なる内部サーブレットをプロキシするにはどうすればよいですか?

1
Adam Matan

代わりにProxyPassMatchを使用します。

ProxyPassMatch    ^/media http://localhost:9002/(.*)
ProxyPassReverse  ^/media http://localhost:9002/(.*)

詳細については、 Apacheオンラインドキュメント を参照してください。

11
dawud