Introdução aos Servidores Web

Introdução

O papel principal de um servidor web é servir páginas da web para um site. Uma página da web pode ser renderizada a partir de um único arquivo HTML ou uma complexa mistura de recursos combinados. Se você deseja hospedar sua aplicação web na internet, em muitos casos, você precisará de um servidor web.

Um dos usos mais comuns dos servidores web é servir arquivos necessários para renderizar um site em um navegador. Quando você visita http://www.digitalocean.com, você começa digitando um URL que inicia uma solicitação através da internet. Esta solicitação passa por várias camadas, uma ou mais das quais serão um servidor web. Este servidor web gera uma resposta à sua solicitação, que, neste caso, é o site da DigitalOcean, especificamente a página inicial. Idealmente, isso acontece rapidamente e com disponibilidade 24/7.

Enquanto qualquer visitante da página inicial da DigitalOcean a experienciará como uma única página da web, na realidade, a maioria das páginas da web modernas hoje são uma combinação de muitos recursos. Os servidores web atuam como intermediários entre o backend e o frontend, servindo recursos como arquivos HTML e CSS a dados JSON, todos gerados dinamicamente em tempo real ou servidos estaticamente. Se você pretende trabalhar com sites ou aplicações online de qualquer forma, é extremamente útil se familiarizar com os fundamentos do que é um servidor web e como ele funciona.

O termo “servidor web” pode se referir tanto ao software em si quanto ao hardware no qual ele existe, mas este artigo se refere especificamente ao software de servidor web. Para mais detalhes sobre essa diferença, confira nossa introdução aos servidores em nuvem.

Casos de Uso Comuns

Um servidor web lida com solicitações na internet através dos protocolos HTTP e HTTPS, e também é chamado de servidor HTTP. Um servidor web é distinto de outros tipos de servidores, pois se especializa em lidar com essas solicitações HTTP e HTTPS, diferenciando-se dos servidores de aplicativos (por exemplo, Gunicorn) e dos servidores para outros protocolos (ou seja, WSGI). Esses outros servidores funcionam como intermediários para linguagens de programação backend através de bibliotecas externas, o que é um nível de abstração diferente dos servidores web.

Aqui estão algumas tarefas comuns realizadas por servidores web:

  • Serve arquivos HTML, CSS e JavaScript.
  • Serve imagens e vídeos.
  • Lida com mensagens de erro HTTP.
  • Lida com solicitações do usuário, frequentemente concurrently.
  • Dirige a correspondência e reescrita de URL.
  • Processa e serve conteúdo dinâmico.
  • Comprime o conteúdo para otimização do uso de dados e velocidade.
  • Permite o armazenamento em cache do navegador para seu conteúdo estático.

Em termos práticos, aqui estão alguns projetos pessoais que envolveriam um servidor web:

  • Você deseja criar um site.
  • Você deseja criar uma aplicação que se conecte à internet.

Essa lista não é de forma alguma abrangente, e um servidor web não está estritamente limitado nos tipos de dados que pode servir a um usuário final. Por exemplo, um servidor web que atende a solicitações de API da web geralmente responde com dados em um formato como JSON.

Objetivos de um Servidor Web

Servidores web atendem a uma audiência com expectativas de velocidade, disponibilidade, confiabilidade e mais. Eles têm um propósito compartilhado de servir conteúdo na internet, e para ser considerado uma solução de servidor web viável, os seguintes aspectos devem ser considerados:

  • Uptime: Isso se refere ao tempo em que um servidor web está online e operacional. Sites precisam estar online o tempo todo para atender aos usuários, então um uptime alto é o objetivo. Isso também se traduz em estabilidade e previsibilidade. Quando um usuário insere uma URL ou clica em um link para o seu site, a página esperada deve carregar toda vez, e a qualquer momento. As únicas exceções devem ser tempo de inatividade planejados para atualizações ou manutenção. Um servidor web que é instável ou que trava aleatoriamente afeta adversamente a experiência dos seus usuários.
  • Velocidade: Suas páginas da web devem carregar o mais rápido possível. Os usuários querem que suas solicitações sejam atendidas imediatamente, caso contrário, você corre o risco de perdê-los. Em uma página da web com carregamento lento, mesmo que o usuário aguarde o primeiro carregamento, cada carregamento longo subsequente reduzirá exponencialmente sua vontade de permanecer ou visitar novamente.
  • Concorrência: Isso se refere ao tratamento de várias solicitações chegando ao mesmo tempo. Ter muitas pessoas tentando visitar seu site ao mesmo tempo parece ser uma coisa boa, mas isso se torna um problema real quando os tempos de carregamento diminuem até uma craw e todo o seu servidor falha. Seu servidor físico ou virtual só tem tantos recursos, como RAM e poder de computação de CPU, e os servidores web devem usar esses recursos de forma eficiente.
  • Escalabilidade: Escalabilidade se refere a fazer seus servidores existentes mais poderosos através de escalonamento vertical ou adicionar mais servidores à sua configuração através de escalonamento horizontal. À medida que você cresce sua audiência, pode chegar a um ponto onde você precisa de mais de um ou dois pequenos servidores web.
  • Fácil configuração: Tornar um projeto operacional rapidamente é a chave para a iteração do seu projeto. Um processo de instalação direto e repetível é importante para o primeiro servidor web que você configura e para os múltiplos servidores web subsequentes quando você escala.
  • Documentação: Servidores web são complexos. As configurações mais comuns podem rapidamente te colocar no caminho certo, mas suas necessidades crescerão ao longo do tempo. Muitas vezes, você precisará de recursos que não são usados com tanta frequência. Quando esse tempo chegar, uma boa documentação é essencial para criar soluções personalizadas para suas necessidades.
  • Suporte de desenvolvedores: Se os desenvolvedores principais não estão comprometidos com seu próprio projeto, você não deve comprometer seu projeto com o deles. Isso inclui tanto planos de suporte a longo prazo para seu software quanto o suporte a curto prazo imediato que eles fornecem na forma de correções de bugs e patches.
  • Suporte da comunidade: A equipe de desenvolvimento central lidará com a maioria do trabalho pesado, mas uma comunidade vibrante contribui para preencher os lacunas. Com projetos de código aberto, isso pode significar contribuições para a base de código real, mas uma comunidade forte também responderá às suas perguntas e ajudará com suas questões específicas.

Embora os servidores web possam oferecer diferentes soluções, as soluções que eles oferecem decorrem de tentativas de abordar esses mesmos problemas. Esses problemas mesmos evoluem ao longo do tempo, juntamente com as necessidades e expectativas do usuário final, tornando essa uma lista viva e sempre evoluindo.

Selecionando uma Solução de Servidor Web

Os servidores web de código aberto mais populares atualmente são o Apache e o Nginx.

O Apache veio primeiro e foi construído em um momento em que era comum ter múltiplos websites com seus próprios arquivos de configuração individuais todos existindo em um único servidor web. O Nginx veio após o Apache, em um momento quando as necessidades se deslocaram da servidora de múltiplos websites de um único servidor e, em vez disso, em direção a servir um website de um servidor de maneira extremamente eficiente sob carga.

Embora os servidores web compartilhem os mesmos objetivos e problemas, cada interpretação e implementação de solução será diferente. As respostas exatas a esses problemas moldam a identidade de qualquer solução de servidor web dada. O Nginx e o Apache são destacados aqui devido à sua ubiquidade, mas qualquer solução de servidor web será opinativa. Ao selecionar um servidor web, é importante manter em mente suas próprias necessidades para o seu projeto específico. Dessa forma, mesmo que o cenário das ofertas de servidores web mude, sua método de avaliação permanece firme em suas próprias exigências.

Aqui estão alguns diferenciadores-chave de como os servidores web tentam alcançar os objetivos de um servidor web:

Estrutura dos Arquivos de Configuração

Os servidores web armazenam suas configurações em arquivos de configuração. Você pode personalizar seus servidores web editando esses arquivos. O armazenamento e a organização dos arquivos de configuração são uma questão estrutural e opinativa que divide os produtos de servidor web.

A principal divisão está entre centralização e descentralização. Arquivos de configuração descentralizados permitem um nível granular de controle no nível do sistema de arquivos, o que deriva da necessidade de hospedar múltiplos websites em um único servidor. Configurações centralizadas não se concentram em hospedar múltiplos websites em um servidor, e em vez disso, focam em servir eficientemente um único website. Essas configurações dependem de correspondência de padrões URI, que é a correspondência de URLs a nomes de arquivos e outros identificadores únicos, em vez de depender de correspondência contra a estrutura de diretórios de um servidor web.

Os arquivos .htaccess do Apache facilitam uma configuração descentralizada como uma funcionalidade, e todas as decisões de design fluem a partir deste foco no sistema de arquivos com um nível de controle granular. O Nginx não tem o mesmo foco no sistema de arquivos e se concentra em correspondência de padrões URI e uma configuração centralizada.

Gerenciando Concorrência

Os servidores físicos e virtuais onde você executa servidores web têm recursos limitados, como RAM e processamento de CPU. Como seu servidor web gerencia fundamentalmente suas solicitações terá o maior impacto no uso eficiente de seus recursos. Uma única solicitação pode gerar um processo inteiro por solicitação, ou pode ser tratada com base em eventos. A capacidade de seu servidor web de lidar com múltiplas solicitações simultâneas de maneira eficiente está ligada a decisões de design fundamentais.

O Apache lida com as solicitações gerando processos, o que consome recursos a uma taxa que pode se tornar um problema sob carga. O sistema de tratamento de eventos do Nginx usa menos recursos e pode ser mais eficiente sob carga.

Servindo Conteúdo Estático

Além de páginas da web, os servidores web recebem solicitações para outros recursos, como imagens, vídeos, arquivos CSS e arquivos JavaScript. Como esses itens são sempre os mesmos, independentemente de quem os solicita, esse tipo de conteúdo é referido como estático. Muitas vezes, uma página da web é apenas um arquivo HTML que não é personalizado para a pessoa que a solicita e também é tratado como conteúdo estático. Os servidores web também podem comprimir esse conteúdo estático para melhorar os tempos de carregamento.

O Nginx se destaca ao servir conteúdo estático devido ao seu tratamento de solicitações baseado em eventos. O Apache também pode servir conteúdo estático, mas na maioria das configurações, não com a mesma velocidade e eficiência sob carga em comparação com o Nginx.

Servindo Conteúdo Dinâmico

Quando o conteúdo é alterado, processado e personalizado dependendo de quem está requisitando, o conteúdo é referido como dinâmico. Por exemplo, após você fazer login em um site, o site muitas vezes preencherá dinamicamente seu nome de usuário na barra de navegação superior. O conteúdo dinâmico adiciona complexidade extra, pois força o servidor web a lidar com muitas requisições de maneira única no momento em que a recebe. Conteúdo personalizado por solicitação não pode ser servido a todos e não pode ser armazenado em cache universalmente.

Processar conteúdo dinâmico internamente remove uma camada extra de abstração que normalmente exigiria a transferência da solicitação para uma biblioteca externa. O Apache implementa nativamente o processamento de conteúdo dinâmico, com pilhas de solução populares como LAMP (Linux, Apache, MySQL, PHP). O Nginx é mais agnóstico a linguagem, mas requer bibliotecas externas, como o PHP-FPM, para atuar como uma solução semelhante para casos de uso como a pilha LAMP.

Capacidade de Proxy Reverso

Uma proxy reversa está localizada na frente de um servidor web tradicional, tornando-se um servidor intermediário que encaminha o tráfego de solicitações HTTP para servidores web atrás dela. A proxy reversa se torna a gateway que direciona o tráfego entre servidores web e a internet em geral, e frequentemente é a camada que interage diretamente com um firewall. Embora a maioria dos servidores web tenham capacidade de proxy reversa, o Nginx foi construído e otimizado desde o início para ser um servidor de proxy reversa robusto.

A importância do Nginx no uso real mundial pesa fortemente em suas funcionalidades de proxy reversa e eficiência. Muitas configurações de servidor colocam vários servidores web tradicionais atrás de uma proxy reversa Nginx, usando o Nginx para determinar a qual servidor web enviar a solicitação com base na carga ou configuração de regras. Essa função intermediária permite que ele até se pareie com o Apache em algumas configurações, sentando-se como uma proxy reversa na frente de um servidor web Apache tradicional.

Ecosistema de Suporte

O Nginx e o Apache têm apoio forte de suas equipes de desenvolvimento e comunidades respectivas. Sendo os servidores web de código aberto mais populares, os recursos de aprendizado são abundantes. O Apache é suportado pela Apache, uma organização sem fins lucrativos, e sempre será gratuito para usar. O núcleo do Nginx é de código aberto, mas funcionalidades desejáveis estão bloqueadas atrás de seu produto Nginx Plus, oferecendo recursos como verificações de saúde de upstream, persistência de sessão e monitoramento avançado.

Alternativas ao Servidor Web Tradicional

Se você deseja um servidor pronto a todo momento para responder a uma solicitação HTTP recebida, então um servidor web realiza essa tarefa de melhor maneira. À medida que se afasta da ênfase em atender a solicitações HTTP, os servidores web se tornam menos uma solução ideal. Isso é especialmente verdadeiro para as características auxiliares que os servidores web fornecem. Por exemplo, recursos como cache podem ser gerenciados mais eficientemente nos níveis de proxy reverso ou CDN, dependendo da configuração.

Além disso, à medida que os desenvolvedores mudaram suas prioridades ao dedicar recursos de desenvolvimento ao gerenciamento de servidores web, surgiram soluções como serverless, CMS sem cabeça (headless CMS) e Jamstack. Essas soluções não exigem um servidor web auto-hospedado, ao invés disso, abstrairam a camada do servidor web para serviços externos. Para desenvolvedores que não precisam de controle granular ou avançado da camada do servidor web, o tempo de desenvolvimento pode ser focado em outros lugares. Para mais informações, consulte este artigo sobre Jamstack com CMS sem cabeça ou implantação de Jamstack full stack com a Plataforma de Aplicativos da DigitalOcean.

Conclusão

Neste artigo, você passou por um básico introdução sobre o que são servidores web, como eles são usados e os problemas que eles tentam resolver. Equipado com essa conhecimento, você se mergulhou na paisagem atual de soluções de servidores web e aplicou seu conhecimento para encontrar a solução que se adapta às suas necessidades especificamente. Para aprender mais sobre como configurar e usar um servidor web, confira o restante da nossa série de currículos de nuvem sobre servidores web.

Recursos Adicionais

Tutoriais:

  • Como Instalar o Apache: Instruções passo a passo para configurar seu primeiro servidor Apache. Esta solução se destaca com configuração descentralizada para controle granular e manipulação interna de páginas web dinâmicas com ganchos para linguagens de programação populares, como PHP.
  • Como Instalar o Nginx: Instruções passo a passo para configurar seu primeiro servidor Nginx. Esta solução se destaca com configuração centralizada, atendimento de ativos estáticos, atuação como proxy reverso e manipulação de tráfego de alta concorrência.
  • Apache vs Nginx: Considerações Práticas: Uma olhada mais aprofundada nos dois principais participantes no cenário de soluções de servidores web.

Produtos DigitalOcean:

  • Droplets DigitalOcean: Servidores virtuais privados para você testar e implantar servidores web.
  • Funções DigitalOcean: Solução sem servidores que pode ser uma alternativa aos servidores virtuais privados. Pule o mantimento de servidores, concentre-se no seu código de aplicação.

Source:
https://www.digitalocean.com/community/conceptual_articles/web-servers-introduction