web-dev-qa-db-ja.com

「リダイレクト」と「ProxyPass」を使用する

ユーザーにhttpsを使用してログインするように強制したいのですが、残念ながら「redirect」ディレクティブは「ProxyPass」と連携して機能しないようです。

<VirtualHost *:80>
  ServerName www.domain.com
  # This does not work
  Redirect permanent /app/login.jsp https://www.domain.com/app/login.jsp
  ProxyPass         /app    http://localhost:8080/app
  ProxyPassReverse  /app    http://localhost:8080/app
</VirtualHost>

何か案が ?ありがとう。

8
Yann

ここでこの質問に対する答えを見つけました:

https://serverfault.com/questions/605931/can-you-use-redirect-and-proxypass-at-the-same-time

他のproxypassディレクティブの前に、以下を追加する必要があります。

ProxyPass /app/login.jsp!

8
Rune Stilling

もっと複雑なユースケースがあり、ProxyPassMatchを使用する必要がありました。それはこのように少し行きました:

ProxyPassMatch ^/app(/(index.html)?)?$ !
RedirectMatch ^/app(/(index.html)?)?$ /path/to/login/page.html

ProxyPass /app/* http://remote-server/app
ProxyPassReverse /app/* http://remote-server/app

ProxyPassMatchはプレフィックス照合を実行するため、ProxyPassを使用する必要がありました。文字列の終わりで一致する必要があるため、ProxyPassMatch$正規表現のメタ文字は重要です。

ここでは、RedirectMatchも同じように使用されます。これは、Redirectもプレフィックスマッチングを実行するためです。 2つのディレクティブにも対称性があります。

5

あなたが特定したように、あなたが場所/appProxyPassを持っているという事実は、そのパスに当たるすべてのものがプロキシの対象となることを意味します。

ProxyPassの使用を省略し、RewriteRuleとプロキシ[P]フラグを使用してプロキシを実行できます。

<VirtualHost *:80>
  ServerName www.domain.com

  RewriteRule ^/(app/login.jsp)$ https://www.domain.com/$1 [R=301,L]
  RewriteRule ^/app(.*) http://localhost:8080/app$1 [P]

  ProxyPassReverse /app http://localhost:8080/app

</VirtualHost>
0
arco444