gzip压缩在Solr 5.1中不起作用

时间:2015-05-22 08:22:36

标签: solr compression jetty gzip apache-zookeeper

我试图在Solr 5.1中应用gzip压缩。我知道Solr 5.0不再支持在Tomcat上运行Solr,所以我试图在Solr中实现它。

我已经下载了jetty-servlets-9.3.0.RC0.jar并将其放在我的webapp \ WEB-INF文件夹中,并在webapp \ WEB-INF \ web.xml中添加了以下内容:

<filter>
   <filter-name>GzipFilter</filter-name>
   <filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class>
      <init-param>
         <param-name>methods</param-name>
         <param-value>GET,POST</param-value>
         <param-name>mimeTypes</param-name>
         <param-value>text/html,text/plain,text/xml,text/json,text/javascript,text/css,application/xhtml+xml,application/javascript,image/svg+xml,application/json,application/xml; charset=UTF-8</param-value>
      </init-param>
</filter>
<filter-mapping>
<filter-name>GzipFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

然而,当我启动Solr并检查浏览器时,没有gzip压缩,我只在响应头输出中得到以下内容: 内容类型:文本/无格式;字符集= UTF-8 传输编码:分块

我有错误配置或可能错过的任何内容吗?我还在运行zookeeper-3.4.6。

1 个答案:

答案 0 :(得分:1)

下载与其目前在Solr中匹配的Jetty的Kosher版本:http://www.eclipse.org/jetty/download.html

将.zip解压缩到您要丢弃的位置。 将这些文件复制到Solr中的jetty副本(位于path-solr / server /中):

  • modules/gzip.mod
  • etc/gzip.xml

修改modules/gzip.mod

#
# GZIP module
# Applies GzipHandler to entire server
#

[depend]
server

[xml]
etc/jetty-gzip.xml

[ini-template]
## Minimum content length after which gzip is enabled
jetty.gzip.minGzipSize=2048

## Check whether a file with *.gz extension exists
jetty.gzip.checkGzExists=false

## Gzip compression level (-1 for default)
jetty.gzip.compressionLevel=-1

## User agents for which gzip is disabled
jetty.gzip.excludedUserAgent=.*MSIE.6\.0.*

修改etc/gzip.xml

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<!-- =============================================================== -->
<!-- Mixin the GZIP Handler                                          -->
<!-- This applies the GZIP Handler to the entire server              -->
<!-- If a GZIP handler is required for an individual context, then   -->
<!-- use a context XML (see test.xml example in distribution)        -->
<!-- =============================================================== -->
<Configure id="Server" class="org.eclipse.jetty.server.Server">
    <Call name="insertHandler">
        <Arg>
            <New id="GzipHandler" class="org.eclipse.jetty.server.handler.gzip.GzipHandler">
                <Set name="minGzipSize">
                    <Property name="jetty.gzip.minGzipSize" deprecated="gzip.minGzipSize" default="2048"/>
                </Set>
                <Set name="checkGzExists">
                    <Property name="jetty.gzip.checkGzExists" deprecated="gzip.checkGzExists" default="false"/>
                </Set>
                <Set name="compressionLevel">
                    <Property name="jetty.gzip.compressionLevel" deprecated="gzip.compressionLevel" default="-1"/>
                </Set>
                <Set name="excludedAgentPatterns">
                    <Array type="String">
                        <Item>
                            <Property name="jetty.gzip.excludedUserAgent" deprecated="gzip.excludedUserAgent" default=".*MSIE.6\.0.*"/>
                        </Item>
                    </Array>
                </Set>
                <Set name="includedMethods">
                    <Array type="String">
                        <Item>GET</Item>
                        <Item>POST</Item>
                    </Array>
                </Set>

    <Set name="includedPaths"><Array type="String"><Item>/*</Item></Array></Set>

    <Set name="excludedPaths"><Array type="String"><Item>*.gz</Item></Array></Set>

    <Call name="addIncludedMimeTypes"><Arg><Array type="String">
        <Item>text/html</Item>
        <Item>text/plain</Item>
        <Item>text/xml</Item>
        <Item>application/xml</Item><!-- IMPORTANT - DO NOT FORGET THIS LINE -->
        <Item>application/xhtml+xml</Item>
        <Item>text/css</Item>
        <Item>application/javascript</Item>
        <Item>image/svg+xml</Item>
    </Array></Arg></Call>
                <!--
    <Call name="addExcludedMimeTypes"><Arg><Array type="String"><Item>some/type</Item></Array></Arg></Call>
    -->
            </New>
        </Arg>
    </Call>
</Configure>

这部分应该让你有点畏缩。 修改bin\solr.cmd

...
set "SOLR_JETTY_CONFIG=--module=http,gzip"
...
set "SOLR_JETTY_CONFIG=--module=https,gzip"
...

请注意--module=http已经存在。只需添加",gzip"即可与上面的行匹配。 我希望找到一种更好的方法来指定要加载的gzip模块,但我不知道如何。如果你知道怎么做,请回答这个问题并告诉我如何因为我讨厌修改产品附带的脚本 - 这是一个维护噩梦,而且,我认为你能得到这个。

在此之后,重新启动solr服务器,现在应启用gzip - 至少&wt=xmlContent-Type: application/xml将其发送回去。 您可以向etc/gzip.xml添加所需内容,然后重新启动solr服务器以识别您的更改。

我测试了1000个文件的压缩和不压缩。对我来说,这是3.8 MB和637 KB之间的差异。