Ada*_*tan 3 tomcat proxy redirect apache-2.2
我的团队编写了一个内部 BI 服务器,它在/users/daily
或等链接处生成 HTML 报告/updates/questions
。
服务器是用Grails编写的,它与经典的 Apache-Tomcat 设置完美配合:
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
Run Code Online (Sandbox Code Playgroud)
所以
https://example.com/users/daily
Run Code Online (Sandbox Code Playgroud)
在内部代理到
http://localhost:8080/users/daily
Run Code Online (Sandbox Code Playgroud)
并由 Tomcat servlet 提供服务。
服务器成功,我想将它部署三次,到 3 个不同的系统,由 URL 后缀 ( /dev
, /stg
, /prod
)区分:
这意味着https://example.com/dev/users/daily
将从 代理http://localhost:8080/users/daily
,并将https://example.com/prod/users/daily
从http://localhost:8082/users/daily
.
我尝试了一些 ApacheRewriteRule
和ProxyPass
规则,但找不到有效的组合。
如何在具有工作内部链接的 Apache 中进行基于后缀的内部路由?
你可以这样做
<Location /dev>
RewriteEngine on
RewriteRule ^/dev/(.*) /$1
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
</Location>
Run Code Online (Sandbox Code Playgroud)
等等。这将为不同的 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>
Run Code Online (Sandbox Code Playgroud)
等等。
归档时间: |
|
查看次数: |
5590 次 |
最近记录: |