Glassfish JSF/EAR Apache 2.2 proxy_ajp_mod 缺少引用内容(图像/链接/等)

Glassfish JSF/EAR Apache 2.2 proxy_ajp_mod 缺少引用内容(图像/链接/等)

全面披露:由于这似乎更多的是一个配置问题,我将其从 Stack 中删除(没有得到任何响应)并在此处重新发布。

问题在于如何更改 mod_proxy_ajp 后面 Glassfish 提供的 requestContextPath。如果直接连接到 Glassfish 端口 8080,则站点/应用程序运行良好,最终不是我想做的事。

因此我需要帮助配置我的服务器和 jsf 部署。我可以看到问题,但不知道如何解决。它与 requestContextPath 有关。

  • 简而言之,Apache 指向http://mysite.com/welcome.xhtml正确的和我想要的,但是页面缺少图像和样式。

  • 问题是 Glassfish 本身仍然指向http://mysite.com/myapp/*。因此它在应用程序/网站中提供的所有链接仍然通过 requestContextPath 引用。这是/myapp/*的一部分http://mysite.com/myapp/welcome.xhtml

  • 当我查看页面源代码时,使用相对链接引用的图像仍然指向 requestContextPath(即 /myapp/)。这是可以修复的,但真的很麻烦。

但是,通过页面链接我无法设置相对路径。

  • 如果我将鼠标悬停在联系页面链接上,我会看到http://mysite.com/myapp/contact.xhtml,如果我单击它,我就会得到 404。您也可以/myapp/在页面源代码中看到上下文路径。

  • 如果我输入 URL,http://mysite.com/contact.xhtml我会得到该页面减去其引用的链接(requestContextPath)。

在 Apache 上

ProxyPass / ajp://littlewalterserver:8009/myapp-web/

ProxyPassReverse / ajp://littlewalterserver:8009/myapp_Project-web

在 Glassfish 上

asadmin create-network-listener --listenerport 8009 --protocol http-listener-1 --jkenabled true jk-connector

我尝试进入 Glassfish 并将 Web 应用程序设置为默认 Web 应用程序。我已更改/glassfish-web.xml 中的 (并检查以确保它在 EAR 文件中是相同的)。

我怎样才能让 Glassfish 不将/myapp/上下文包含在 URL 中?如果您知道如何做,这应该很容易,但我不知道怎么做,有人能帮忙吗?谢谢。

答案1

我找到了一些现在可以用的东西。

初步看来,当我在“安全”选项卡中设置默认 Web 应用程序时,我也<context-root>/</context-root>同时在 glassfish-web.xml 中进行了设置。这肯定不起作用。

有效的方法是,我将 EAR 的 Web 应用程序设置为 glassfish 控制台安全屏幕中的默认 Web 应用程序,并将其<context-root>/</context-root>从 glassfish-web.xml 中删除。

然后我将 httpd.conf 中的 proxypass 行更改为:

ProxyPass / ajp://myapp-web/

ProxyPassReverse / ajp://myapp_Project-web

虽然它可以工作,但它有点违背了使用代理的目的之一,即允许 Web 应用程序继续在其上下文中运行,但为用户提供易于链接的内容。您只能在上下文中拥有一个默认 Web 应用程序,因此如果您想使用 Glassfish 添加更多网站(如内容管理),这会严重限制您。也就是说,没有重写日志。可惜他们无法想出办法让它“正常工作”。

我仍然可以使用 apache 来提供静态内容并充当 SSL 连接的前门,但对这种方法不太满意。如果有人知道更好的方法,我仍然愿意尝试。

相关内容