Abordamos as principais configurações para otimizar o desempenho do servidor web nginx, incluindo a compressão gzip, configuração do proxy_buffer, e configurações do worker e keep-alive.
Destacamos a importância da compressão gzip e do buffer proxy_buffer para reduzir o volume de dados transmitidos e minimizar a carga do servidor, além da gestão de conexões através das configurações do processo worker e keep-alive.
Apresentamos considerações para aplicar as configurações ótimas para o seu ambiente de servidor após diversos testes e garantimos a operação estável do servidor.
O Nginx é um servidor web de código aberto, frequentemente usado como servidor web ou servidor proxy web.
Com a configuração correta, ele pode fornecer conteúdo estático de forma eficiente.
Neste artigo, documentarei algumas de suas configurações principais.
Algumas configurações principais relacionadas ao desempenho
1. Compressão gzip
Ao carregar um site, inúmeros arquivos, como JavaScript, imagens, HTML e CSS, são recebidos do servidor web.
Em vez de enviar esses conteúdos em seu formato original, o uso da compressão gzip pode reduzir significativamente a quantidade de dados transmitidos.
Ou seja, ao aplicar isso,
- A quantidade de dados é reduzida, economizando largura de banda.
- Os recursos do servidor podem ser economizados.
- Do ponto de vista do usuário, a velocidade de carregamento real é mais rápida.
Por outro lado, como o servidor precisa executar a compressão gzip antes de responder ao conteúdo, o uso da CPU do servidor pode aumentar.
É necessário testar antes da implementação em nível de produção, incluindo o tipo de arquivo a ser compactado, o nível de compactação e o tamanho do arquivo a ser compactado.
Aqui estão algumas configurações relacionadas ao gzip.
gzip on; # Habilita a compressão gzip.
gzip_vary on; # Adiciona Vary: Accept-Encoding ao cabeçalho.
gzip_proxied any; # Se o Nginx for usado como servidor proxy, ele compacta a resposta recebida do backend. (Compressão para solicitações em proxy)
gzip_min_length 256; # Somente arquivos com 256 bytes ou mais são compactados
gzip_comp_level 5; # Define o nível de compressão de 1 a 9. Quanto maior, maior o uso da CPU. 5 comprime cerca de 50%.
gzip_types text/plain text/css text/xml application/json application/javascript;
// Define os tipos de conteúdo a serem compactados.
* gzip_vary instrui o servidor a enviar conteúdo compactado e não compactado para clientes que suportam e não suportam gzip, respectivamente. (Informa que diferentes versões de conteúdo podem ser fornecidas de acordo com o cabeçalho de solicitação do cliente (Accept-Encoding)).
2. Configuração do proxy_buffer
O Nginx armazena em buffer a resposta antes de enviá-la ao cliente.
Quando um servidor web envia uma resposta a um cliente, se o cliente for lento, o servidor precisa esperar continuamente para transmitir dados. (Gargalo de rede)
Como os recursos do servidor estão sendo usados continuamente nesse caso, para resolver isso, um buffer é usado para processar temporariamente a resposta, independentemente da velocidade de processamento do cliente. Isso resulta nos seguintes benefícios:
- Otimização da carga do servidor
- Redução de gargalos de rede
location / {
proxy_pass url_do_servidor;
# Configuraçãodo buffer proxy
proxy_buffering on; # Ativa o buffer.proxy_buffer_size 4k; # Define o tamanho do buffer.(Principalmente para cabeçalhos) proxy_buffers 8 4k; # Número e tamanho dos buffers para cada conexão(8 buffers de 4kb) proxy_busy_buffers_size 8k; # Tamanho máximo do buffer que pode ser usado enquanto envia a resposta para o cliente
}
※ Se o tamanho do buffer for muito grande, a transmissão de dados em tempo real, como streaming de texto, pode ser atrasada, portanto, é necessário testar. Especialmente com o surgimento de muitos serviços relacionados a IA recentemente, se o streaming de texto não funcionar, verifique esta configuração.
3. Configurações do worker e http
O worker é o processo que processa as solicitações do cliente e você pode configurar quantos workers terá para cada núcleo da CPU do servidor.
HTTP geralmente é uma solicitação - conexão - resposta - encerramento da conexão, mas para reduzir os recursos usados para estabelecer conexões em várias solicitações, a conexão do cliente pode ser mantida. Esta é a configuração keep-alive.
worker_processes auto; # Configuração automática com base no número de núcleos de CPU disponíveis
worker_connections 1024; # Número de conexões que cada worker pode processar simultaneamente
# Configuração keep-alive
keepalive_timeout 65;
keepalive_requests 100;
server {
listen 80;
location / {
proxy_pass url_do_servidor;
}
}
A razão para agrupar esses dois é a seguinte:
Se o servidor estiver usando 4 núcleos, o número teórico de conexões possíveis é 1.024 * 4 = 4.096.
(Pode não ser preciso devido aos recursos ou ao ambiente de tráfego)
Quando 4.096 clientes estão conectados simultaneamente e ocupam todos os keep-alives por 65 segundos,
Se o 4.097º usuário tentar conectar, ele não poderá se conectar, resultando em um possível atraso na resposta.
Portanto, assumindo que os recursos do servidor são estáveis devido a escalonamento automático, etc., se houver um atraso na resposta durante um evento, as configurações acima podem ter um impacto indireto.
4. Outros - bloco location
Algumas configurações, como o buffer proxy, podem ser aplicadas por URL de solicitação.
* Algumas configurações, como keep-alive, são aplicadas no nível do servidor HTTP e não podem ser configuradas por bloco.
Com essas configurações, você pode otimizar o desempenho da web. Considere vários casos de teste e faça testes suficientes para otimizar o desempenho do servidor!
* É possível aplicar o Nginx com as configurações alteradas sem tempo de inatividade do servidor, portanto, é geralmente estável.