我已经使用 mod_proxy 设置了一个 Apache httpd 服务器代理对 Tomcat 的请求,监听端口 80。我唯一的问题是静态图像和 css 没有正确显示。如果我在端口 8080 上单独使用 Tomcat 作为服务器,则图像和 css 看起来很好。任何想法如何显示它们?谢谢!
注意:我在 Mac 上并且正在使用 Amazon EC2 服务器。一个例子将是非常受欢迎的。
终于想通了,伙计们-当你读到这篇文章时请不要踢我。我将 Apache2 与 Spring 3 一起使用,并使用 Springsource Tool Suite 作为 IDE。我无法让它运行的全部原因是因为我在我的索引 jsp 文件中使用了它:
<link rel="stylesheet" href="<spring:url value="/resources/styles/foo.css" htmlEscape="true" />" type="text/css"/>
问题是,当在 Tomcat 7 服务器上运行时,它是完美的。但是,当在以 tomcat 作为容器的 apache 2 服务器上运行时,该 css 文件没有显示出来。所以我删除了/
来自/resources/styles/foo.css
:
<link rel="stylesheet" href="<spring:url value="resources/styles/foo.css" htmlEscape="true" />" type="text/css"/>
然后,它在 Apache+Tomcat 和独立的 Tomcat 上都能完美运行。
感谢并抱歉浪费您的时间。
此问题涉及路径转换,您可能会将您的应用程序提供给顶层 / 的客户端,但相应的路径将是 /myapp/(例如)。在 tomcat 下运行的 Servlet 应用程序通常以这种方式设置,以便将多个应用程序合二为一,您的 apache 设置如下所示:
ProxyPass / http://localhost:8080/myapp/
ProxyPassReverse / http://localhost:8080/myapp/
您的后端应用程序 (myapp) 不知道这种翻译,并且仍然提供它的常用路径。例如,您的应用程序引用了一些静态图像文件,这些文件由在tomcat 中运行的应用程序提供,位于/myapp/images/ 位置,您可以做的一种方法是将特殊代理映射与其他重写规则分开。
ProxyPass /myapp/images http://localhost:8080/myapp/images
ProxyPassReverse /myapp/images http://localhost:8080/myapp/images
所以你可以在前一个指令块前面使用这些行。
在 apache 中有一个 htdocs 文件夹,其中创建一个与您的项目文件夹名称相同的文件夹并将资源粘贴到该文件夹中并重新启动服务器。
您的 apache 错误日志将包含图像的 404,请注意正在使用的 URL 以及: