私のチームは、/users/daily
や/updates/questions
などのリンクでHTMLレポートを生成する内部BIサーバーを作成しました。
サーバーは Grails で記述されており、従来のApache-Tomcat設定で完全に機能します。
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
そう
https://example.com/users/daily
内部でプロキシされます
http://localhost:8080/users/daily
そして、Tomcatサーブレットから提供されます。
サーバーは成功しました。URLサフィックス(/dev
、/stg
、/prod
)で区別される3つの異なるシステムにサーバーを3回デプロイしたいと思います。
つまり、https://example.com/dev/users/daily
はhttp://localhost:8080/users/daily
からプロキシされ、https://example.com/prod/users/daily
はhttp://localhost:8082/users/daily
から提供されます。
Apache RewriteRule
sとProxyPass
のルールをいくつか試しましたが、有効な組み合わせが見つかりませんでした。
内部リンクが機能しているApacheでサフィックスベースの内部ルーティングを行うにはどうすればよいですか?
あなたはこれを行うことができます
<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>
等々。