Estou escrevendo alguns serviços da Web que retornam dados JSON, que têm muitos usuários.
Quais são os benefícios de usar o Nginx na frente do meu servidor em comparação com apenas usar o servidor http go?
Estou escrevendo alguns serviços da Web que retornam dados JSON, que têm muitos usuários.
Quais são os benefícios de usar o Nginx na frente do meu servidor em comparação com apenas usar o servidor http go?
Respostas:
Depende.
Fora da caixa, colocar o nginx na frente como um proxy reverso vai lhe dar:
O servidor Go HTTP é muito bom, mas você vai precisar reinventar a roda para fazer algumas dessas coisas (o que é bom: ele não está destinado a ser tudo para todos).
Sempre achei mais fácil colocar o nginx na frente - que é o que ele faz bem - e deixá-lo fazer as coisas do "servidor web". O aplicativo My Go faz as coisas do aplicativo e apenas o mínimo de cabeçalhos / etc. que ele precisa. Não considere colocar o nginx na frente como uma coisa "ruim".
log
pacote). Se você deseja registrar o endereço IP, acesso a recursos, etc, você precisará escrever isso. O mesmo vale para a configuração de cabeçalhos, além do básico. Embora eu não tenha nenhum dado concreto, o nginx na frente do Go não deve ser mais lento do que o Go: na verdade, ele pode ser mais rápido graças ao gzip e suas próprias otimizações. O "custo" será mais utilização de memória / CPU, mas o nginx é muito eficiente nesse aspecto também.
O servidor http padrão do Go está bom. Se sua aplicação em sua maioria / somente são solicitações / respostas "dinâmicas", então é realmente a melhor maneira.
Você poderia usar o nginx para servir ativos estáticos, mas provavelmente o Go padrão também serve para isso. Se precisar de um desempenho superior, você deve usar um CDN ou cache o máximo que puder com o Varnish (por exemplo).
Se você precisa atender a diferentes aplicativos com o mesmo endereço IP, o nginx é uma boa escolha para um proxy para distribuir solicitações entre os diferentes aplicativos; embora seja mais comum eu pegar Verniz ou HAProxy da caixa de ferramentas para esse tipo de coisa.
O kit de ferramentas da web Gorilla oferece:
schema
pacote converte valores de formulário em uma estrutura.Isso preenche muitas lacunas entre os net/http
servidores Go e HTTP como o NGINX.
Pessoalmente, evito instalar e configurar outro servidor HTTP net/http
se souber que posso conectar um CDN.
Acho que net/http
tem o servidor HTTP mais poderoso de qualquer biblioteca padrão.
Em https://blog.gopheracademy.com/caddy-a-look-inside/ , parece que Go pode lidar com gzip, erros, arquivos estáticos, roteamento e cabeçalhos http usando Middleware. A linha abaixo, do blog, mostra como você lidaria com tal solicitação.
logHandler(gzipHandler(fileServer))
Eles lidam com o log de erros de uma maneira realmente interessante. Contanto que seu middleware retorne um código de erro (int), o middleware de tratamento de erros o trata automaticamente. Eles até configuraram todo o site em Go como o Nginx faria. "O arquivo nginx.conf para todos os sites da Gopher Academy tinha mais de 115 linhas. O Caddyfile equivalente tem apenas 50 linhas."