Tomcat mod_jk 压缩导致 Apache httpd

Tomcat mod_jk 压缩导致 Apache httpd

我正在我的系统上本地开发一个 Web 应用程序,并使用 Tomcat (tomcat-7.0.52) 为其提供服务。在生产中,我想使用 Apache httpd (Apache/2.2.15) 来为 Tomcat 提供前端。

这有效,我设法根据需要配置了缓存。现在我想配置压缩,但似乎无法让 Apache httpd 修改它从 Tomcat 获得的响应。

但是正如我在这里读到的,这是首选的方法。mod_jk 压缩仅在 httpd 和 Tomcat 之间进行,如果我想直接在 Tomcat 中配置压缩,我需要一个额外的 servlet。

我的 vhost 文件中有以下行,用于启用静态和 httpd 提供的内容的压缩:

 #SetOutputFilter DEFLATE
 AddOutputFilterByType DEFLATE text/plain text/html application/json text/xml text/css text/javascript

启用第一行对我来说没有任何改变。

我使用 mod_jk 将这些请求传递给 Tomcat:

<IfModule mod_jk.c>
 JkMount /myapp/j_security_check worker1
 JkMount /myapp/*.jsp worker1
 JkMount /myapp/DataSourceLoader worker1
 JkMount /myapp/ServletLogin worker1
</IfModule>

使用 Firebug 我可以看到 Tomcat 返回的请求的 mime 类型是

/myapp/j_security_check: "text/plain; charset=UTF-8" (with the space)
/myapp/*.jsp: "text/plain; charset=UTF-8" (with the space)
/myapp/DataSourceLoader: "application/json;charset=UTF-8"  (without space)

由于我无法添加空格按类型添加输出过滤器因为我也有不带 UTF-8 的 mime-types,而且我也尝试过设置输出过滤器,我认为这些指令根本不能操纵 Tomcat 答案。

我的问题是:

  1. 最好的建议解决方案是什么?Tomcat 压缩还是 Apache httpd 压缩?(根据使用 mod_deflate apache 和 tomcat 进行 gzip 压缩(重定向至此处:https://stackoverflow.com/questions/16653642/tomcat-7-gzip-compression-not-working)应该在httpd中完成)

  2. 如何为 mod_jk 结果启用 Apache httpd-compression(可能来自 JBoss 而不是 Tomcat)?

  3. 或许相关:如何在 Apache httpd 中从 mod_jk 结果修改缓存标头?

谢谢你!

答案1

布拉马,

我同意#1,可以使用 apache 或其他 Web 服务器来处理压缩。

以下是我的想法:

  1. 我在 tomcat 前面使用 apache mod_proxy 或 nginx。这样我就可以根据需要处理 SSL、压缩和静态内容。我已经开始转向 nginx 来替换前端的 apache。
  2. 适用于 apache 或 nginx ngx_http_gzip_module 的 mod_deflate
  3. 您可以在 tomcat 或 apache 中处理所有缓存规则。这取决于您想要什么规则。

相关内容