我正在实现一个在 Tomcat 7 下运行的 JSF2/RichFaces 4 Web 应用程序。我在 Eclipse 下使用 MyEclipse 和 Tomcat 7 开发它,一切正常。当我将应用程序部署到完整的生产环境时,资源库 images/css/js 文件从 Apache 获取 404。生产环境是带有 SSL 和 mod_proxy 前端 Tomcat 7 的 Apache 2。我怀疑代理设置是错误的,并且当 tomcat webapp 运行时,Apache GET 请求没有被正确代理,但我没有我想我知道的足以理解为什么。
从顶部开始,这是我的带有代理的 apache 虚拟主机(注意 *:443 用于 ssh):
NameVirtualHost *:443
<VirtualHost *:443>
ServerName testapp.xxx.org
SSLEngine on
SSLProxyEngine on
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/testapp.xxx.org.crt
SSLCertificateKeyFile /etc/pki/tls/private/testapp.xxx.org.key
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
# Proxy everything to tomcat.
ProxyPass / http://localhost:8080/testapp/
ProxyPassReverse / http://localhost:8080/testapp/
</VirtualHost>
当我转到https://testapp.xxx.org时,应用程序启动并显示 JSF,但没有 CSS、js 和图像。一个这样的图像资源的 HTML 看起来像这样,这是正确的(在 Eclipse 下相同):
<img src="/testapp/javax.faces.resource/images/tairlogo.png.xhtml?ln=default" alt="TAIR web site" />
它应该从 webapp 上下文根开始并寻找资源库。对应的 Apache 访问日志 GET 在这里:
"GET /testapp/javax.faces.resource/images/tairlogo.png.xhtml?ln=default HTTP/1.1" 404 12500
此图像的实际 JSF 代码是:
<h:outputLink value="http://www.arabidopsis.org">
<h:graphicImage library="default" name="images/tairlogo.png"
alt="TAIR web site"></h:graphicImage>
</h:outputLink>