Quais são os benefícios de usar o Nginx na frente de um servidor da web para Go? [fechadas]


84

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?


Fyi, tinha muitos erros de tcp, como reconfiguração de conexão por peer e tempos limite de i / o usando o servidor Go http para lidar com 100s de grandes solicitações POST por minuto. Coloque o nginx na frente dele - sem mais problemas.
Peter Kelly

Acabei decidindo usar o servidor Go http, sem NGINX, e funciona muito bem. Eu não estou correndo em nenhum problema. Mas meu serviço não está executando grandes solicitações POST como no seu caso.
Daniele B

20
ISTO NÃO É NECESSARIAMENTE BASEADO EM OPINIÕES. Fechar como tal mostra uma grave falta de compreensão das considerações e advertências que uma resposta a essa pergunta pode preencher e fornecer. A resposta selecionada é um ótimo exemplo. Na verdade, vejo novas considerações relevantes em todas as respostas fornecidas.
vee_ess 02 de

Respostas:


135

Depende.

Fora da caixa, colocar o nginx na frente como um proxy reverso vai lhe dar:

  • Registros de acesso
  • Logs de erros
  • Encerramento SSL fácil
  • Suporte SPDY
  • suporte gzip
  • Maneiras fáceis de definir cabeçalhos HTTP para determinadas rotas em algumas linhas
  • Fornecimento de recurso estático muito rápido (se você estiver exibindo S3 / etc., Porém, isso não é relevante)

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".


Obrigado pela sua resposta! - 1) Go HTTP produz algum tipo de registro? - 2) o nginx reduz de alguma forma a taxa de transferência de solicitação / resposta?
Daniele B

3
@DanieleB O servidor Go HTTP produz apenas os logs que você deseja (ou seja, usando o logpacote). 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.
elithrar

16
Mais um grande recurso: como você atualizará / manterá seu aplicativo (sem perder pacotes enquanto ele estiver inativo)? O Nginx permite que você direcione o tráfego sem perder pacotes.
BraveNewCurrency de

+1, o Nginx está em seu próprio lugar.
Anatoly

3
No meu Raspberry Pi, colocar o Nginx na frente do Go aumentou significativamente a velocidade de carregamento da página.
425 nsp de

17

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.


sim, na verdade estou usando apenas para fornecer dados dinâmicos. Então, acho que não preciso do NGINX! Obrigado pela sua resposta
Daniele B

Varnish / HAProxy não são necessários, o Nginx tem um conjunto de ferramentas semelhante para armazenamento em cache e balanceamento de carga.
Anatoly

@mikhailov não foi isso que eu disse? nginx funciona bem para isso; embora pessoalmente eu prefira Varnish ou HAproxy. Acho que são mais fáceis de configurar e operar.
Pergunte a Bjørn Hansen de

5

O kit de ferramentas da web Gorilla oferece:

  • Roteamento avançado (restrição de domínio / subdomínio, correspondência de caminho regex).
  • suporte gzip (por meio de gerenciadores de middleware ).
  • Manipulador de middleware de log que produz no Apache Common Log Format.
  • Cookies criptografados seguros.
  • Sessões.
  • schema pacote converte valores de formulário em uma estrutura.

Isso preenche muitas lacunas entre os net/httpservidores Go e HTTP como o NGINX.

Pessoalmente, evito instalar e configurar outro servidor HTTP net/httpse souber que posso conectar um CDN.

Acho que net/httptem o servidor HTTP mais poderoso de qualquer biblioteca padrão.


2

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."

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.