web-dev-qa-db-ja.com

Apache:URLサフィックスに基づくプロキシ

私のチームは、/users/daily/updates/questionsなどのリンクでHTMLレポートを生成する内部BIサーバーを作成しました。

サーバーは Grails で記述されており、従来のApache-Tomcat設定で完全に機能します。

ProxyPass         /     http://localhost:8080/ nocanon
ProxyPassReverse  /     http://localhost:8080/

enter image description here

そう

https://example.com/users/daily

内部でプロキシされます

http://localhost:8080/users/daily

そして、Tomcatサーブレットから提供されます。

サーバーは成功しました。URLサフィックス(/dev/stg/prod)で区別される3つの異なるシステムにサーバーを3回デプロイしたいと思います。

enter image description here

つまり、https://example.com/dev/users/dailyhttp://localhost:8080/users/dailyからプロキシされ、https://example.com/prod/users/dailyhttp://localhost:8082/users/dailyから提供されます。

Apache RewriteRulesとProxyPassのルールをいくつか試しましたが、有効な組み合わせが見つかりませんでした。

内部リンクが機能しているApacheでサフィックスベースの内部ルーティングを行うにはどうすればよいですか?

3
Adam Matan

あなたはこれを行うことができます

<Location /dev>
  RewriteEngine on
  RewriteRule  ^/dev/(.*)  /$1
  ProxyPass         /  http://localhost:8080/ nocanon
  ProxyPassReverse  /  http://localhost:8080/
</Location>

等々。これにより、URLごとに異なるプロキシが提供され、URLから先頭の/ dev、/ staging、または/ prodが削除されます。

ただし、問題があります。Tomcatから返されるHTMLのリンクのURLベースは/ devではなく/になります。プレフィックスをHTMLに戻すには、 mod_proxy_html またはHTMLを解析し、変更して、元に戻すのと同じです。それは機能しますが、パフォーマンスコストがかかります。不正な形式のHTMLは混乱する可能性があります。 CSSとJavascriptでもURLを書き直す必要があります。そして、Javascriptを正しく理解することは不可能かもしれません。

より簡単な別のオプション:DNSに新しいホスト名を作成します:dev.biserver.example.com、staging.biserver.example.com、およびprod.biserver.example.com。そうすれば、URLの書き換えはなくなり、仮想ホストですべてを行うことができます。

<VirtualHost *:443>
  ServerName dev.biserver.example.com
  ProxyPass         /  http://localhost:8080/ nocanon
  ProxyPassReverse  /  http://localhost:8080/
</VirtualHost>

等々。

5
Andrew Schulman