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.
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:
![](https://img-blog.csdnimg.cn/img_convert/89d2426a04fe648ca1a84e8c3ee0bced.jpeg)
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.
![](https://img-blog.csdnimg.cn/img_convert/b36311b8e2f253ce817ee9b54d459107.jpeg)
Modo Mestre-Trabalhador
![](https://img-blog.csdnimg.cn/img_convert/efc346f8322e36a5ad3fe235fb7b3d72.jpeg)
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
![](https://img-blog.csdnimg.cn/img_convert/f6081b7ab5aae726cf082cf5bd780d9e.jpeg)
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.