Skip to main content
Version: Next

gzip

Description#

The gzip Plugin dynamically sets the behavior of gzip in Nginx. When the gzip plugin is enabled, the client needs to include Accept-Encoding: gzip in the request header to indicate support for gzip compression. Upon receiving the request, APISIX dynamically determines whether to compress the response content based on the client's support and server configuration. If the conditions are met, APISIX adds the Content-Encoding: gzip header to the response, indicating that the response content has been compressed using gzip. Upon receiving the response, the client uses the corresponding decompression algorithm based on the Content-Encoding header to decompress the response content and obtain the original response content.

IMPORTANT

This Plugin requires APISIX to run on APISIX-Runtime.

Attributes#

NameTypeRequiredDefaultValid valuesDescription
typesarray[string] or "*"False["text/html"]Dynamically sets the gzip_types directive. Special value "*" matches any MIME type.
min_lengthintegerFalse20>= 1Dynamically sets the gzip_min_length directive.
comp_levelintegerFalse1[1, 9]Dynamically sets the gzip_comp_level directive.
http_versionnumberFalse1.11.1, 1.0Dynamically sets the gzip_http_version directive.
buffers.numberintegerFalse32>= 1Dynamically sets the gzip_buffers directive parameter number.
buffers.sizeintegerFalse4096>= 1Dynamically sets the gzip_buffers directive parameter size. The unit is in bytes.
varybooleanFalsefalseDynamically sets the gzip_vary directive.

Enable Plugin#

The example below enables the gzip Plugin on the specified Route:

note

You can fetch the admin_key from config.yaml and save to an environment variable with the following command:

admin_key=$(yq '.deployment.admin.admin_key[0].key' conf/config.yaml | sed 's/"//g')
curl -i http://127.0.0.1:9180/apisix/admin/routes/1  -H "X-API-KEY: $admin_key" -X PUT -d '
{
"uri": "/index.html",
"plugins": {
"gzip": {
"buffers": {
"number": 8
}
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
}
}'

Example usage#

Once you have configured the Plugin as shown above, you can make a request as shown below:

curl http://127.0.0.1:9080/index.html -i -H "Accept-Encoding: gzip"
HTTP/1.1 404 Not Found
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Date: Wed, 21 Jul 2021 03:52:55 GMT
Server: APISIX/2.7
Content-Encoding: gzip

Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.

Delete Plugin#

To remove the gzip Plugin, you can delete the corresponding JSON configuration from the Plugin configuration. APISIX will automatically reload and you do not have to restart for this to take effect.

curl http://127.0.0.1:9180/apisix/admin/routes/1  -H "X-API-KEY: $admin_key" -X PUT -d '
{
"uri": "/index.html",
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
}
}'