【问题标题】:does nginx support compress the request to the upstream?nginx是否支持将请求压缩到上游?
【发布时间】:2013-05-30 12:10:41
【问题描述】:

nginx 支持这个吗? 请给我看看它的一些配置?

[Client]           [Nginx Reverse Proxy]               [BackEnd]
   |   [Raw Post]         |    [gzip encoded request]     |   
   |--------------------> | ----------------------------->|
   |                      |                               |  
   |   [Raw Response]     |    [gzip encoded response]    |
   | <------------------  | <-----------------------------|
   |                      |                               |

【问题讨论】:

  • 为什么不呢?如果您将 nginx 配置为代理,它将充当代理
  • 我的要求是使用nginx做压缩/解压,在不修改客户端的情况下减少网络流量。你能举一个nginx配置的例子吗?
  • gzip 压缩是一种广泛认可的 HTTP 请求压缩方法,而且所有使用 HTTP 请求的浏览器或其他类型的软件都支持它,为什么要发送原始数据?
  • 抱歉,“客户端”不支持 gzip 编码/解码,这是问题所在。

标签: nginx


【解决方案1】:

显然有一些方法可以做到这一点。 Nginx 有一个 gunzip 模块,可以 gzip 解压缩响应:

ngx_http_gunzip_module 模块是一个过滤器,用于解压 响应“内容编码:gzip”的客户端不 支持“gzip”编码方式。该模块在使用时将很有用 需要压缩存储数据,以节省空间并减少 I/O 费用。

这个模块不是默认构建的,它应该被启用 --with-http_gunzip_module 配置参数。

来源:http://nginx.org/en/docs/http/ngx_http_gunzip_module.html

然后你可以像这样使用它:

gunzip on;

希望对你有用。

另请参阅这个 SO 问题: Is there sort of unzip modules in nginx?

【讨论】:

    【解决方案2】:

    完整而正确的答案是 nginx 可以 做到这一点,但有一些警告。为了向边缘客户端(用户 PC)提供未压缩的响应,您必须使用 gunzip 模块编译 nginx - 默认情况下未构建/包含该模块。这与 gzip 模块相反,它允许 nginx 解压缩在磁盘上找到的或从后端服务器获取的已压缩资源。

    所以在编译 nginx 的时候,包括这个: --with-http_gunzip_module

    在您的nginx.conf 中,您将有一个这样的块来描述从后端服务器获取的请求:

        location @backend {
            ...
            proxy_pass http://10.0.0.xxx;
            gunzip on;
            proxy_set_header Accept-Encoding "gzip";
        }
    

    【讨论】:

      【解决方案3】:

      您可以通过在您的nginx.conf 中将gzip 指令设置为off 来关闭nginx 中的gzip 压缩:

      gzip off
      

      此外,您可以仅为代理请求打开 gzip 压缩:

      gzip_proxied off
      

      Nginx 有一个很棒的 wiki,其中清楚地解释了所有这些信息: http://wiki.nginx.org/HttpGzipModule

      关于 nginx 代理:在 nginx wiki 中也有明确描述:

      例子:

      location / {
        proxy_pass        http://localhost:8000;
        proxy_set_header  X-Real-IP  $remote_addr;
      }
      

      http://wiki.nginx.org/HttpProxyModule

      有许多不同的方法可以设置代理,因此您应该深入了解自己到底需要什么,对此没有“单一”的答案。

      【讨论】:

      • Err.... 也许我的问题不够清晰。我的问题是,客户端不支持gzip,我需要代理为客户端做gzip编码/gzip解码。
      • 为什么你的后端不直接发回原始数据?你想让 nginx 解码它然后发送它吗?这是一个非常奇怪的过程,我认为这不可能,因为 nginx 并不是为了做到这一点而发明的。
      猜你喜欢
      • 1970-01-01
      • 2012-08-04
      • 2023-03-19
      • 1970-01-01
      • 2017-10-24
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多