Entenda o Nginx em termos simples

Antes de o artigo começar, fornecerei um documento oficial chinês do nginx para os alunos que precisam aprendê-lo. Espero que possa ajudar a todos. Você pode obtê-lo diretamente no cartão abaixo.

Benefícios para os fãs e materiais de auto-estudo estão disponíveis por tempo limitado! ​magedu2018.mikecrm.com/I9zX5EO


Comece o texto!

Compartilhe um artigo de Jianshu. A explicação do Nginx é muito boa. Link do artigo: Nginx em termos simples . Página inicial do autor: Zhang Fengzhe - Jianshu .

Nginx é um servidor web leve e um servidor proxy reverso. Devido ao seu pequeno consumo de memória, inicialização extremamente rápida e alta capacidade de simultaneidade, é amplamente utilizado em projetos de Internet.

Diagrama de arquitetura

A imagem acima ilustra basicamente a arquitetura técnica popular atual, na qual o Nginx é um pouco como um gateway de entrada.

Servidor proxy reverso?

Muitas vezes ouço pessoas falarem sobre alguns termos, como proxy reverso, então o que é proxy reverso e o que é proxy direto?

Proxy de encaminhamento:

Diagrama de proxy de encaminhamento

Proxy reverso:

Diagrama de proxy reverso

Devido ao firewall, não podemos acessar o Google diretamente, então podemos usar uma VPN para fazer isso. Este é um exemplo de proxy de encaminhamento simples. Aqui você pode descobrir que o proxy de encaminhamento "faz proxy" do cliente, e o cliente conhece o alvo, mas o alvo não sabe que o cliente é acessado por meio de VPN.

Quando acessamos o Baidu da rede externa, na verdade realizaremos um encaminhamento e proxy para a rede interna, esse é o chamado proxy reverso, ou seja, o proxy reverso "atua" no lado do servidor, e esse processo é muito difícil para o cliente. Seja transparente.

Modo Nginx Master-Worker

processo nginx

Depois de iniciar o Nginx, o serviço Socket é realmente iniciado para monitoramento na porta 80. Conforme mostrado na figura, o Nginx envolve o processo Master e o processo Worker.

Modo Mestre-Trabalhador

nginx.conf

Qual é o papel do processo Master?

Leia e verifique o arquivo de configuração nginx.conf; gerencie o processo de trabalho;

Qual é o papel do processo de trabalho?

Cada processo Worker mantém um thread (para evitar a troca de threads), lida com conexões e solicitações; observe que o número de processos Worker é determinado pelo arquivo de configuração e geralmente está relacionado ao número de CPUs (favorável para troca de processos). sejam tantos quantos você configurar. Processo de trabalho.

Pensando: como o Nginx consegue uma implantação dinâmica?

A chamada implantação a quente significa que após a modificação do arquivo de configuração nginx.conf, não há necessidade de parar o Nginx ou interromper a solicitação para que o arquivo de configuração entre em vigor! (nginx -s recarregar recarregar/nginx -t verificar configuração/nginx -s parar)

Pelo exposto, já sabemos que o processo de trabalho é responsável pelo processamento de solicitações específicas, portanto, se você deseja obter o efeito de implantação a quente, pode imaginar:

Opção um:

Após modificar o arquivo de configuração nginx.conf, o mestre do processo principal é responsável por enviar as informações de configuração de atualização para o processo waker. Após o processo waker receber as informações, ele atualiza as informações do thread dentro do processo. (um pouco valátil)

Opção II:

Depois de modificar o arquivo de configuração nginx.conf, gere novamente um novo processo de trabalho. É claro que as solicitações serão processadas com a nova configuração e as novas solicitações devem ser entregues ao novo processo de trabalho. Quanto ao processo de trabalho antigo, essas solicitações anteriores serão processadas. Após o processamento, basta matá-lo.

Nginx adota a segunda solução para alcançar implantação dinâmica!

Pensando: Como o Nginx consegue um processamento eficiente sob alta simultaneidade?

Como mencionado acima, o número de processos de trabalho Nginx está vinculado à CPU, e o processo de trabalho contém um thread para fazer um loopback eficiente para lidar com solicitações. Isso ajuda na eficiência, mas não é suficiente.

Como programadores profissionais, podemos usar nossa imaginação: BIO/NIO/AIO, assíncrono/síncrono, bloqueador/não bloqueador...

Para processar tantas solicitações ao mesmo tempo, você deve saber que algumas solicitações requerem IO, o que pode levar muito tempo. Se você esperar, diminuirá a velocidade de processamento do trabalhador.

Nginx adota o modelo epoll do Linux. O modelo epoll é baseado em um mecanismo orientado a eventos. Ele pode monitorar se vários eventos estão prontos. Se estiver OK, coloque-os na fila epoll. Este processo é assíncrono. O trabalhador só precisa sair da fila epoll.

Pensando: o que devo fazer se o Nginx travar?

Como o Nginx serve como porta de entrada, é muito importante: se ocorrer um problema pontual, é obviamente inaceitável.

A resposta é: Keepalived+Nginx alcança alta disponibilidade .

Keepalived é uma solução de alta disponibilidade, usada principalmente para evitar falhas de servidor de ponto único e pode ser usada com Nginx para obter alta disponibilidade de serviços da web. (Na verdade, Keepalived pode cooperar não apenas com o Nginx, mas também com muitos outros serviços)

A ideia da Keepalived+Nginx de alcançar alta disponibilidade:

Primeiro: a solicitação não deve ser enviada diretamente para o Nginx, mas deve ser enviada primeiro através do Keepalived (este é o chamado IP virtual, VIP)

Segundo: Keepalived deve ser capaz de monitorar o status de vida do Nginx (fornecer um script definido pelo usuário para verificar regularmente o status do processo Nginx e alterar o peso, alcançando assim o failover do Nginx)

Manter ativo + Nginx

Nosso principal campo de batalha: nginx.conf

Muitas vezes, em ambientes de desenvolvimento e teste, temos que configurar nós mesmos o Nginx, ou seja, configurar o nginx.conf.

nginx.conf é um arquivo de configuração segmentado típico, vamos analisá-lo a seguir.

anfitrião virtual

seção do servidor http

Acessar resultados

Na verdade, trata-se de usar o Nginx como servidor web para processar recursos estáticos.

Primeiro: o local pode realizar correspondência regular. Você deve prestar atenção às diversas formas e prioridades da correspondência regular. (Não expandido aqui)

Segundo: Um dos recursos do Nginx que pode melhorar a velocidade é: separação dinâmica e estática, o que significa colocar recursos estáticos no Nginx, gerenciá-los pelo Nginx e encaminhar solicitações dinâmicas para o backend.

Terceiro: podemos atribuir recursos estáticos e arquivos de log a diferentes nomes de domínio (ou seja, diretórios) no Nginx, o que facilita o gerenciamento e a manutenção.

Quarto: Nginx pode realizar controle de acesso IP. Algumas plataformas de comércio eletrônico podem fazer algum processamento na camada Nginx e construir um módulo de lista negra. Então, não há necessidade de esperar que a solicitação chegue ao back-end por meio do Nginx para interceptar, mas diretamente É tratado na camada Nginx.

Proxy reverso [proxy_pass]

O chamado proxy reverso é muito simples: na verdade, basta substituir root na configuração do local por proxy_pass . A descrição raiz é um recurso estático que pode ser retornado pelo Nginx; enquanto a descrição proxy_pass é uma solicitação dinâmica que precisa ser encaminhada, como proxy para o Tomcat.

Proxy reverso, como mencionado acima, o processo é transparente, por exemplo, request -> Nginx -> Tomcat, então para Tomcat, o endereço IP solicitado é o endereço Nginx, não o endereço real da solicitação. Isso precisa ser observado. Felizmente, o Nginx pode não apenas reverter solicitações de proxy, mas também personalizar o HTTP HEADER pelo usuário .

Balanceamento de carga【upstream】

No proxy reverso acima, usamos proxy_pass para especificar o endereço do Tomcat. Obviamente, só podemos especificar um endereço do Tomcat, e se quisermos especificar vários endereços do Tomcat para obter balanceamento de carga?

Primeiro, defina um grupo de Tomcats por meio do upstream e especifique a estratégia de carregamento (IPHASH, argumento ponderado, mínimo de conexões), estratégia de verificação de integridade (o Nginx pode monitorar o status deste grupo de Tomcats), etc.

Segundo, substitua proxy_pass pelo valor especificado pelo upstream.

Que problemas o balanceamento de carga pode causar?

O problema óbvio causado pelo balanceamento de carga é que uma solicitação pode ir para o servidor A ou para o servidor B, o que está completamente fora de nosso controle. Claro, isso não é um problema, mas o que devemos prestar atenção é: o status do usuário Salvar problemas, como informações da sessão, não pode ser salvo no servidor.

esconderijo

Cache é um mecanismo fornecido pelo Nginx que pode agilizar o acesso.Para ser franco, a configuração é habilitá-lo e especificar um diretório para que o cache possa ser armazenado no disco. Para configuração específica, você pode consultar a documentação oficial do Nginx, que não será expandida aqui.

Recentemente vi alguns artigos relacionados que eram bastante detalhados. Se você quiser saber mais, pode dar uma olhada.

Explicação detalhada do Nginx

Acho que você gosta

Origin blog.csdn.net/yx1166/article/details/127071553
Recomendado
Clasificación