Índice
Não é recomendado habilitar o cenário gzip no Nginx
Introdução básica ao gzip
gzip é a abreviatura de GNUzip, que foi usado pela primeira vez para compactação de arquivos em sistemas UNIX. A codificação Gzip sobre o protocolo HTTP é uma tecnologia usada para melhorar o desempenho de aplicações Web. O servidor Web e o cliente (navegador) devem suportar gzip . Atualmente, todos os navegadores convencionais, como Chrome, Firefox, IE, etc., suportam este protocolo. Servidores comuns como Apache, Nginx e IIS também suportam gzip.
Como funciona o gzip
- 1) O navegador solicita a URL e define o atributo accept-encoding:gzip no cabeçalho da solicitação. Indica que o navegador oferece suporte a gzip.
- 2) Após receber a solicitação enviada pelo navegador, o servidor determina se o navegador suporta gzip. Se suportar gzip, enviará conteúdo compactado para o navegador. Se não suportar, enviará conteúdo descompactado para o navegador. Geralmente, navegadores e servidores suportam gzip, e os cabeçalhos de resposta retornados contêm codificação de conteúdo:gzip.
- 3) Após receber a resposta do servidor, o navegador determina se o conteúdo está compactado, se estiver compactado, ele descompacta e exibe o conteúdo da página.
gzip no Nginx
A fim de melhorar a velocidade com que os usuários obtêm os dados de resposta, o servidor Nginx pode compactar os dados de resposta com gzip e reduzir o tamanho dos dados de resposta antes de enviá-los ao navegador do cliente. Em comparação com permitir que os usuários naveguem nas páginas da Web, o método acima exibe mais rápido.
Para ativar a função de compactação gzip de dados de resposta (módulo ngx_http_gzip_module), o navegador do usuário também precisa suportar a função de descompactação gzip
instrução | Escopo | valor padrão | Opções de valor de comando | Descrição da instrução |
---|---|---|---|---|
gzip | http、servidor、localização、se estiver no local | desligado | ligado ou desligado | Habilitar função gzip |
gzip_buffers | http、servidor、localização | 32 4k ou 16 8k | -- | Definir buffer de compactação gzip |
gzip_comp_level | http、servidor、localização | 1 | -- | Defina o nível de compactação gzip, o intervalo de valores é de 1 a 9. Quanto maior o valor deste comando, maior o grau de compactação. |
gzip_disable | http、servidor、localização | -- | -- | Desative a compactação gzip quando o conteúdo do campo de atributo User-Agent no cabeçalho da solicitação corresponder ao valor do comando. |
gzip_http_versão | http、servidor、localização | 1.1 | 1,0 ou 1,1 | Define a versão mais antiga do protocolo HTTP para solicitações compactadas |
gzip_min_length | http、servidor、localização | 20 | -- | Defina o comprimento mínimo dos dados de resposta com a compactação gzip habilitada, com base no valor de Content-Length no cabeçalho da resposta. Se Content-Length não existir, a diretiva é inválida; se o valor da diretiva for 0, significa toda a compactação |
gzip_proxied | http、servidor、localização | desligado | desativado ou expirado ou sem cache ou sem armazenamento ou privado ou no_last_modified ou no_etag ou auth ou qualquer | Determine se deseja ativar a compactação gzip com base no campo de atributo do cabeçalho de resposta dos dados de resposta retornados pelo servidor proxy |
gzip_types | http、servidor、localização | texto/html | -- | Defina o tipo MIME de dados de resposta que podem ser compactados com gzip. Quando o valor do comando é *, significa todos os tipos MIME. |
gzip_vary | http、servidor、localização | desligado | ligado ou desligado | Adicione Vary:Accept-Encoding no cabeçalho de resposta e retorne-o ao proxy front-end ou servidor CDN para determinar se deve enviar uma cópia em cache gzip ao cliente para evitar que o proxy ou servidor CDN responda a uma cópia em cache que não tem compactação gzip. Navegador com recursos de descompactação |
As opções de valor de comando da diretiva gzip_proxied são descritas a seguir:
- off: desliga a função de comando;
- expirado: se o cabeçalho da resposta HTTP contiver o campo de atributo Expira, a compactação será habilitada;
- no-cache: Se o cabeçalho da resposta HTTP contiver o campo de atributo Cache-Control: no-cache, a compactação está habilitada;
- no-store: Se o cabeçalho da resposta HTTP contiver o campo de atributo Cache-Control: no-store, a compactação está habilitada;
- private: Se o cabeçalho da resposta HTTP contiver o campo de atributo Cache-Control:private, a compactação será habilitada;
- no_last_modified: Se o cabeçalho da resposta HTTP não contiver o campo de atributo Last-Modified, a compactação será habilitada;
- no_etag: Se o cabeçalho da resposta HTTP não contém o campo de atributo ETag, a compactação é habilitada;
- auth: Se o cabeçalho da resposta HTTP contiver o campo de atributo Autorização, a compactação será habilitada;
- qualquer: habilita a compactação para todos os dados de resposta.
Quando o navegador do cliente não suporta compactação gzip, você pode usar o módulo ngx_http_gunzip_module para descompactar os dados compactados e enviá-los ao cliente. Os navegadores que suportam compactação gzip não são processados.
gzip_static always; # 始终发送静态的gzip压缩数据
gunzip on; # 若客户端浏览器不支持gzip压缩数据,则解压后发送
gunzip_buffers 16 8k; # 解压缓冲区大小为128KB
gzip_proxied expired no-cache no-store private auth; # 当被代理的服务器符合条件时,
# 对响应数据启用gzip压缩
gzip on; # 启用动态gzip压缩功能
gzip_min_length 1k; # 响应数据超过1KB时启用gzip压缩
gzip_buffers 4 16k; # 动态压缩的缓冲区大小是64KB
gzip_comp_level 3; # 压缩级别为3
gzip_types text/plain application/x-javascript
text/css application/xml text/javascript
application/x-httpd-php image/jpeg
image/gif image/png; # 对指定的MIME类型数据启用动态压缩
gzip_vary on; # 向前端代理或缓存服务器发送添加"Vary: Accept-
# Encoding"的响应数据
Não é recomendado habilitar o cenário gzip no Nginx
Embora a função de compactação Gzip do Nginx seja fácil de usar, não é recomendado habilitar esta função de compactação para os dois tipos de recursos de arquivo a seguir.
- 1) Motivo dos recursos do tipo de imagem (e arquivos de vídeo) : As próprias imagens, como os arquivos jpg e png, são compactadas, portanto, mesmo depois que o gzip é ativado, não há muita diferença entre o tamanho antes e depois da compactação.
- 2) Recursos de arquivos grandes Motivo: consumirá muitos recursos da CPU e pode não ter efeitos óbvios.