Wildfly 的配置 GZip

Posted

技术标签:

【中文标题】Wildfly 的配置 GZip【英文标题】:Configuration GZip at Wildfly 【发布时间】:2015-05-13 19:20:49 【问题描述】:

我在 Wildfly 服务器中配置 GZip 时遇到问题,在服务器上使用以下配置:

<subsystem xmlns="urn:jboss:domain:undertow:1.2">
        <buffer-cache name="default"/>
        <server name="default-server">
            <http-listener name="default" socket-binding="http"/>
            <host name="default-host" alias="localhost">
                <location name="/" handler="welcome-content"/>
                <filter-ref name="gzipFilter" predicate="path-suffix['.css'] or path-suffix['.js'] or path-suffix['.xhtml']"/>
                <filter-ref name="server-header"/>
                <filter-ref name="x-powered-by-header"/>
            </host>
        </server>
        <servlet-container name="default">
            <jsp-config/>
            <websockets/>
        </servlet-container>
        <handlers>
            <file name="welcome-content" path="$jboss.home.dir/welcome-content"/>
        </handlers>
        <filters>
            <response-header name="server-header" header-name="Server" header-value="Wildfly 8"/>
            <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow 1"/>
            <gzip name="gzipFilter"/>
        </filters>
    </subsystem>

并且正确地成为了请求的 Zip 文件,但是我想设置要压缩的文件的最小大小以及我的难处,任何人都知道如何设置服务器的最小大小在发送之前执行 zip给客户?

【问题讨论】:

【参考方案1】:

undertow 中有一个谓词 min-content-size 所以你可以使用predicate=min-content-size[500]

由于缺少文档,我在 https://github.com/undertow-io/undertow/tree/master/core/src/main/java/io/undertow/predicate 找到了可用的谓词

【讨论】:

【参考方案2】:

扩展亚历山大的答案,我做了一些测试。奇怪的是,仅压缩大于 500 字节的文件的谓词是 not min-content-size[500]

要使用jboss-cli.sh 配置它,请运行以下脚本:

/subsystem=undertow/configuration=filter/gzip=gzipFilter:add()
/subsystem=undertow/server=default-server/host=default-host/\
   filter-ref=gzipFilter:add(predicate="not min-content-size[500]")

请注意,gzip 过滤器将在服务器重新加载后开始工作。您可以使用 cli 的命令 :reload 来执行此操作。

为了测试过滤器是否启用,我使用了:

wget $MY_URL -S --header="accept-encoding: gzip" \
  -O /dev/null 2>&1| grep Content-Encoding

【讨论】:

更新:当您使用 predicate[value] 时,Wildfly 10 会显示以下警告。您应该更改为predicate(value)。但是,Wildfly 9 不接受 predicate(value),它会引发 ParseException。 Predicate not min-content-size[2048] uses old style square braces to define predicates, which will be removed in a future release. predicate[value] should be changed to predicate(value) min-content-size[500] 与“Content-Length”标头一起使用。如果不存在,则此谓词返回 false。所以not min-content-size[500] 的含义是:如果响应的 Content-Length > 500 或者响应没有 Content-Length 标头,则应用 gzip。要更改谓词的最后一部分,您可以将其更改为 exists['%o,Content-Length'] and not min-content-size[500]max-content-size[500]【参考方案3】:

它与谓词一起使用:

predicate="exists['%o,Content-Type'] and regex[pattern='(?:application/javascript|text/css|text/html|text/xml|application/json)(;.*)?', value=%o,Content-Type, full-match=true]"

【讨论】:

以上是关于Wildfly 的配置 GZip的主要内容,如果未能解决你的问题,请参考以下文章

Wildfly 的配置 GZip

如何在 WildFly 中配置压缩日志?

配置 Wildfly 以对 MariaDB 使用 SSL 连接

使用 Infinispan 和 Wildfly 配置 Hibernate Search

在 wildfly 中配置 http 到 https 重定向

Wildfly - 配置 ActiveMQ 以使用 Postgres 日志