在 Apache 代理后面使用 Tomcat 时的漂亮 URL

在 Apache 代理后面使用 Tomcat 时的漂亮 URL

我们运行的是 Tomcat 5.5 和 Apache 2.2 mod_proxy。我们希望 URL 更漂亮。例如,我们的 URL 现在大致是这样的:

http://example.com/foo/app/home   (home page)
http://example.com/foo/app/bar    (other parts of the web app)
http://example.com/foo/api/qux    (API hooks)
http://example.com/foo/quux       (misc)

我们希望公开的 URL 更简单,例如:

http://example.com/         (home page)
http://example.com/bar      (other parts of the web app)
http://example.com/api/qux  (API hooks)
http://example.com/quux     (misc)

我知道如何让 Apache 将传入的 URL 重写为 Tomcat 使用的较长的 URL,但我担心这可能会使 Tomcat 感到困惑。我对 Apache 相当有经验,但对 Tomcat 来说是个新手。

此外,我们希望通过重写而不是重定向来实现这一点(例如,http://example.com/不应该简单地重定向到http://example.com/foo/app/home),因为我们希望将丑陋的 URL 完全排除在地址栏之外。

答案1

如果要将所有内容重写到一个公共位置,则通常会执行以下操作:

ProxyPass        / http://localhost:8080/foo/
ProxyPassReverse / http://localhost:8080/foo/

如果您需要针对不同的路径使用不同的规则,您可能会在一系列 RewriteRules 上使用 Proxy 标志:

RewriteRule /bar/(.*) http://localhost:8080/foo/app/bar/$1 [P]
RewriteRule /api/qux/(.*) http://localhost:8080/foo/api/qux/$1 [P]
RewriteRule /quux/(.*) http://localhost:8080/foo/quux/$1 [P]
RewriteRule /(.*) http://localhost:8080/foo/app/$1 [P]

这会将内容发送到 Tomcat 中的适当位置。

唯一的复杂情况是应用程序动态生成具有完整路径的 URL。在这种情况下,您需要修复应用程序,或者使用类似mod_proxy_html重写 HTML 内容中的链接。

相关内容