全面披露:由于这似乎更多的是一个配置问题,我将其从 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 连接的前门,但对这种方法不太满意。如果有人知道更好的方法,我仍然愿意尝试。