Giter Club home page Giter Club logo

ngx_force_gunzip's Introduction

Nginx Force Gunzip Module

This is a simple patch modifying the NGINX gunzip filter module to force inflate compressed responses. This is desirable in the context of an upstream source that sends responses gzipped. Please read the "other comments" section to understand this will decompress all content, so you want to specify its use as specific as possible to avoid decompressing content that you otherwise would want left untouched.

This serves multiple purposes:

  • It maintains transfering gzipped content between upstream server(s) and nginx, thus reducing network bandwidth.
  • Some modules require the upstream content to be uncompressed to work properly.
  • It allows nginx to recompress the data (i.e. brotli) before sending to the client.

This has been successfully tested up to version 1.20.0 (the current release as of this writing). I don't think the gunzip module code changes much (if any), so it should patch cleanly against older / future versions.

NOTE: The gunzip module is not built by default, you must specify --with-http_gunzip_module when compiling nginx.

Configuration Directives

gunzip_force

  • syntax: gunzip_force on|off
  • default: off
  • context: http, server, location

Enables or disables forced decompression of upstream content.

Other Comments

It should also go without saying, you must enable the gunzip module itself gunzip on; for the gunzip force option to work.

This is best used used in a location context (i.e. where you specify your upstream proxy), especially if you are are also using gzip_static. Reason being if there is a static gziped file, instead of passing it directly this patch will decompress the file and recompress it (assuming you have gzip on) before sending to the client!

Make sure you comment / remove proxy_set_header Accept-Encoding ""; from your nginx configuration, otherwise your upstream server won't compress any content!

I set my upstream server to use gzip level 1 to maximize speed since nginx will recompress the content (typically with brotli).

Original Author

I claim no rights to this work, I found the patch burried in the Nginx Mail Archives from 2013 and simply updated it to patch cleanly on the current mainline release. The original author is Weibin Yao.

ngx_force_gunzip's People

Contributors

jas0n99 avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

ngx_force_gunzip's Issues

Extremely confused

Quoting some README stuff:

This is a simple patch modifying the NGINX gunzip filter module to force inflate compressed responses.

The gunzip module deflates responses, not inflates. I think you got the wording wrong from the author, who is, AFAIK, a Chinese native speaker.

It greatly reduces network bandwidth between nginx and upstream server(s).

How? It doesn't say, but I guess you have to enforce compression by always sending Accept-Encoding: gzip to the upstream, e.g. proxy_set_header Accept-Encoding "gzip";. There is no mention of that in the README at all. Instead, there's a suggestion to comment/remove proxy_set_header Accept-Encoding "";. With this commented, the result would be that some requests are (depending on the client's Accept-Encoding) will be compressed by the upstream, and some not.

I set my upstream server to use gzip level 1 to maximize speed since nginx will recompress the content (typically with brotli).

Something like this would allow unbrotli upstream requests and you wouldn't have to do double compression. (wouldn't work with this patch, I guess).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.