Tomcat mod_jk 的压缩导致 Apache httpd

Bla*_*ama 5 compression tomcat servlet mod-jk apache-2.2

我正在我的系统上本地开发一个 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
Run Code Online (Sandbox Code Playgroud)

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

我使用 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>
Run Code Online (Sandbox Code Playgroud)

使用 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)
Run Code Online (Sandbox Code Playgroud)

由于我无法添加到AddOutputFilterByType的空间,并且因为我也有没有 UTF-8 的 mime-types 并且我也只尝试了SetOutputFilter,我认为这些指令根本不会操纵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 压缩(可能来自 JBoss 而不是 Tomcat)?

  3. 可能相关:如何在 Apache httpd 中修改 mod_jk 结果中的缓存标头?

谢谢!

Ray*_*ter 1

布拉马,

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

这是我的想法:

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