Introdução aos servidores web

Introdução

A web server’s primary role is to serve web pages for a website. A web page can be rendered from a single HTML file, or a complex assortment of resources fitted together. If you want to host your web application on the internet, in many cases you will need a web server.

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

Embora qualquer visitante da página inicial da DigitalOcean a experimente 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 para dados JSON, todos gerados dinamicamente ou servidos estaticamente. Se você pretende trabalhar com sites ou aplicativos online de alguma forma, é extremamente útil se familiarizar com o básico do que é um servidor web e como ele funciona.

Embora o termo “servidor web” possa se referir tanto ao software quanto ao hardware em que ele existe, este artigo se refere especificamente ao software do servidor web. Para mais detalhes sobre essa diferença, confira nossa introdução aos servidores de nuvem.

Casos de Uso Comuns

A web server handles requests on the internet through HTTP and HTTPS protocol, and is also called an HTTP server. A web server is distinct from other types of servers in that it specializes in handling these HTTP and HTTPS requests, differentiating itself from application servers (e.g. Gunicorn) and servers for other protocols (i.e. WSGI). These other servers work as intermediaries for backend programming languages through external libraries, which is a different level of abstraction than web servers.

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

  • Serve arquivos HTML, CSS e JavaScript.
  • Serve imagens e vídeos.
  • Trata mensagens de erro HTTP.
  • Gerencia solicitações de usuários, frequentemente de forma concorrente.
  • Direciona o casamento e a reescrita de URLs.
  • Processa e serve conteúdo dinâmico.
  • Compacta conteúdo para uso de dados e velocidade otimizados.
  • Permite o 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ê quer criar um site.
  • Você quer criar um aplicativo que se conecta à internet.

Esta 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 muitas vezes 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 fornecer conteúdo na internet e, para serem considerados uma solução viável de servidor web, os seguintes aspectos devem ser considerados:

  • Tempo de atividade: Isso se refere ao tempo em que um servidor web está online e operacional. Os sites precisam estar online o tempo todo para atender aos usuários, então um alto tempo de atividade é 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 todas as vezes e a qualquer momento. As únicas exceções devem ser períodos de inatividade planejados para atualizações ou manutenção. Um servidor web com bugs ou que trava em momentos aleatórios afeta negativamente a experiência de 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 aguente o primeiro carregamento, cada carregamento longo subsequente diminuirá exponencialmente sua disposição para permanecer ou visitar novamente.
  • Concorrência: Isso se refere ao gerenciamento de múltiplas solicitações chegando ao mesmo tempo. Ter muitas pessoas tentando visitar seu site ao mesmo tempo parece uma coisa boa, mas isso se torna um problema real quando os tempos de carregamento diminuem para uma velocidade muito baixa e todo o seu servidor trava. Seu servidor físico ou virtual tem apenas tantos recursos, como RAM e poder computacional da CPU, e os servidores web devem usar esses recursos de forma eficiente.
  • Escalaridade: Escalaridade refere-se a tornar seus servidores existentes mais poderosos através de escalonamento vertical, ou adicionar mais servidores à sua configuração através de escalonamento horizontal. Conforme você aumenta sua audiência, pode chegar a um ponto em que precisa de mais do que um ou dois pequenos servidores web.
  • Facilidade de configuração: Colocar um projeto em funcionamento rapidamente é fundamental para a iteração do seu projeto. Um processo de instalação simples e repetível é importante para o primeiro servidor web que você configura, e para os múltiplos servidores web posteriormente, quando você dimensiona sua operação.
  • Documentação: Servidores web são complexos. As configurações mais comuns o colocarão em funcionamento rapidamente, mas suas necessidades crescerão ao longo do tempo. Muitas vezes, você precisará de recursos que não são tão comumente utilizados. Quando chegar esse momento, uma boa documentação é essencial para criar soluções personalizadas para suas necessidades.
  • Suporte do desenvolvedor: Se os desenvolvedores principais não estiverem comprometidos com o próprio projeto, você não deve comprometer seu projeto com o deles. Isso inclui tanto planos de suporte a longo prazo para o software deles, quanto suporte imediato a curto prazo que eles fornecem na forma de correções de bugs e patches.
  • Suporte da comunidade: Uma equipe de desenvolvimento principal lidará com a maior parte do trabalho pesado, mas uma comunidade próspera contribui para preencher as 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 seus problemas específicos.

Embora os servidores web possam oferecer soluções diferentes, as soluções que oferecem derivam de tentativas de resolver esses mesmos problemas. Esses problemas em si evoluem ao longo do tempo, juntamente com as necessidades e expectativas do usuário final, tornando isso uma lista viva e em constante evolução.

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 foi o pioneiro e foi construído em uma época em que era comum que vários sites, com seus próprios arquivos de configuração individuais, existissem em um único servidor web. O Nginx veio depois do Apache, em um momento em que as necessidades se afastaram de servir múltiplos sites a partir de um único servidor, e passaram a servir um único site de forma extremamente eficiente sob carga.

Embora os servidores web compartilhem os mesmos objetivos e problemas, a interpretação e implementação de cada solução serão diferentes. As respostas exatas para esses problemas moldam a identidade de qualquer solução de servidor web específica. 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 suas próprias necessidades em mente para o seu projeto específico. Dessa forma, mesmo que o cenário de ofertas de servidores web mude, seu método de avaliação permanece fundamentado em seus próprios requisitos.

Aqui estão algumas diferenciações-chave na forma como os servidores web tentam alcançar os objetivos de um servidor web:

Estrutura de 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 organização dos arquivos de configuração são questões estruturais e opinativas que dividem os produtos de servidores web.

A principal divisão é entre centralização e descentralização. Arquivos de configuração descentralizados permitem um nível granular de controle em nível de sistema de arquivos, o que decorre da necessidade de hospedar vários sites em um único servidor. Configurações centralizadas não se concentram em hospedar vários sites em um único servidor, e sim em servir eficientemente um único site. Essas configurações dependem de correspondência de padrões de URI, que é a correspondência de URLs com nomes de arquivos e outros identificadores exclusivos, em vez de depender de correspondência com a estrutura de diretórios de um servidor web.

Os arquivos .htaccess do Apache facilitam uma configuração descentralizada como um recurso, e cada decisão de design decorre desse foco no sistema de arquivos com um nível granular de controle. O Nginx não tem o mesmo foco no sistema de arquivos e concentra-se na correspondência de padrões de URI e em uma configuração centralizada.

Tratamento de Concorrência

Os servidores físicos e virtuais nos quais você executa servidores web têm recursos limitados, como RAM e processamento da 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 de forma baseada em eventos. A capacidade do seu servidor web de lidar com várias solicitações simultâneas de forma 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 manipulação 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 solicite, esse tipo de conteúdo é chamado de estático. Muitas vezes, uma página da web em si é apenas um arquivo HTML que não é personalizado para a pessoa que o solicita e também é tratado como conteúdo estático. Os servidores web também podem compactar esse conteúdo estático para tempos de carregamento melhores.

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

Oferecendo Conteúdo Dinâmico

Quando o conteúdo é alterado, processado e personalizado dependendo de quem o solicita, o conteúdo é chamado de dinâmico. Por exemplo, depois que você faz login em um site, muitas vezes o site preencherá dinamicamente seu nome de usuário na barra de navegação superior. O conteúdo dinâmico adiciona complexidade extra porque obriga o servidor web a lidar com muitas solicitações de forma única no momento em que as recebe. Conteúdo personalizado por solicitação não pode ser servido para todos e não pode ser armazenado em cache universalmente.

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

Capacidade de Proxy Reverso

A reverse proxy sits in front of a traditional web server, becoming an intermediary server that routes HTTP request traffic to web servers behind it. A reverse proxy becomes the gateway that directs traffic between web servers and the internet at large, and often is the layer that directly interfaces with a firewall. While most web servers have reverse proxy capability, Nginx was built and optimized from the ground up to be a robust reverse proxy server.

A importância do Nginx no uso do mundo real depende muito de seus recursos de proxy reverso e eficiência. Muitas configurações de servidor colocam vários servidores web tradicionais atrás de um proxy reverso do Nginx, usando o Nginx para determinar para qual servidor web enviar a solicitação com base na carga ou na configuração de regras. Esse papel intermediário permite que ele até mesmo se integre ao Apache em algumas configurações, atuando como um proxy reverso na frente de um servidor web Apache tradicional.

Ecosistema de Suporte

O Nginx e o Apache têm forte suporte de suas respectivas equipes de desenvolvimento e comunidade. 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 recursos desejáveis estão bloqueados atrás de seu produto Nginx Plus com recursos como verificações de saúde upstream, persistência de sessão e monitoramento avançado.

Alternativas ao Servidor Web Tradicional

Se você deseja um servidor que esteja sempre pronto para responder a uma solicitação HTTP recebida, então um servidor web realiza essa tarefa melhor. À medida que você se afasta do foco em servir solicitações HTTP, os servidores web se tornarão menos uma solução ideal. Isso é especialmente verdadeiro para os recursos auxiliares que os servidores web fornecem. Por exemplo, recursos como caching podem ser tratados de forma mais eficiente nos níveis de proxy reverso ou CDN, dependendo da configuração.

Além disso, à medida que os desenvolvedores mudaram suas prioridades em dedicar recursos de desenvolvimento para gerenciar servidores web, soluções como serverless, CMS headless e Jamstack surgiram como resposta. Essas soluções não requerem um servidor web auto-hospedado, em vez disso, abstraindo a camada do servidor web para serviços externos. Para desenvolvedores que não necessitam de controle granular ou avançado da camada do servidor web, o tempo de desenvolvimento pode ser focado em outro lugar. Para mais informações, confira este artigo sobre Jamstack com CMS headless ou implementando Jamstack full stack com a plataforma de aplicativos da DigitalOcean.

Conclusão

Neste artigo, você passou por uma introdução básica sobre o que são servidores web, como eles são usados e os problemas que estão tentando resolver. Equipado com esse conhecimento, você mergulhou na atual paisagem de soluções de servidores web e aplicou seu conhecimento para encontrar a solução que se encaixa especificamente em suas necessidades. Para saber mais sobre como configurar e usar um servidor web, confira o restante da nossa série de Currículo em Nuvem sobre servidores web.

Recursos Adicionais

Tutoriais:

  • Como Instalar o Apache: Instruções passo a passo para configurar o 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 em linguagens de programação populares como PHP.
  • Como Instalar o Nginx: Instruções passo a passo para configurar o seu primeiro servidor Nginx. Esta solução se destaca com configuração centralizada, servindo ativos estáticos, atuando como um proxy reverso e lidando com tráfego de alta concorrência.
  • Apache vs Nginx: Considerações Práticas: Uma análise mais aprofundada dos dois principais players no cenário de soluções de servidores web.

Produtos DigitalOcean:

  • DigitalOcean Droplets: Servidores virtuais privados para você testar e implantar servidores web.
  • Funções DigitalOcean: Solução serverless que pode ser uma alternativa aos servidores virtuais privados. Pule a manutenção dos servidores, concentre-se no código da sua aplicação.

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