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, começa digitando um 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. 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 na hora 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 em 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 tratadas pelos servidores web:

  • Serve arquivos HTML, CSS e JavaScript.
  • Serve imagens e vídeos.
  • Gerencia mensagens de erro HTTP.
  • Trata solicitações de usuários, frequentemente de forma concorrente.
  • Direciona correspondência e reescrita de URL.
  • Processa e serve conteúdo dinâmico.
  • Comprime conteúdo para uso de dados e velocidade otimizados.
  • Permite o cache do navegador para o 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 aos 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 frequentemente 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 considerada 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 um 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 tempos de inatividade planejados para atualizações ou manutenção. Um servidor web que é instável ou trava em momentos aleatórios afeta negativamente 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 que carrega lentamente, mesmo que o usuário aguente a primeira carga, cada carga longa subsequente diminuirá exponencialmente sua disposição para ficar ou visitar novamente.
  • Concorrência: Isso se refere ao manuseio de várias solicitações chegando ao mesmo tempo. Ter muitas pessoas tentando visitar seu site de uma só vez parece ser algo bom, mas isso se torna um problema real quando os tempos de carregamento diminuem para uma rasteira e todo o seu servidor trava. Seu servidor físico ou virtual tem apenas tantos recursos, como memória RAM e poder de computação da CPU, e os servidores web devem usar esses recursos de forma eficiente.
  • Escalabilidade: A escalabilidade refere-se tanto a tornar os servidores existentes mais poderosos através da escalabilidade vertical, quanto a adicionar mais servidores à sua configuração através da escalabilidade horizontal. Conforme você aumenta sua audiência, pode chegar a um ponto em que precisa de mais do que um ou dois servidores web pequenos.
  • Facilidade de configuração: Fazer um projeto funcionar rapidamente é fundamental 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 vários servidores web subsequentes quando você dimensiona.
  • Documentação: Servidores web são complexos. As configurações mais comuns vão colocá-lo de pé 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 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 suporte imediato a curto prazo que eles fornecem na forma de correções de bugs e patches.
  • Suporte da comunidade: Uma equipe principal de desenvolvimento 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 própria base de código, 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 eles 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 em constante evolução e dinâmica.

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 uma época em que era comum múltiplos sites com seus próprios arquivos de configuração individuais existirem 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 em vez disso, direcionaram-se para servir um site a partir de um único servidor 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. 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 ter em mente suas próprias necessidades 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 diferenciadores-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 é uma questão estrutural opinativa que divide os produtos de servidores web.

A principal divisão é entre centralização e descentralização. Arquivos de configuração descentralizados permitem um controle granular 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 para nomes de arquivo e outros identificadores exclusivos, em vez de depender da correspondência com a estrutura de diretórios de um servidor web.

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

Lidando com 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 na utilização 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 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 solicita, 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 comprimir esse conteúdo estático para melhores tempos de carregamento.

O Nginx se destaca no serviço de conteúdo estático devido ao seu sistema de manipulação 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 o solicita, o conteúdo é chamado de dinâmico. Por exemplo, depois de fazer login em um site, frequentemente 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 a transferência da solicitação para uma biblioteca externa. O Apache implementa nativamente o processamento de conteúdo dinâmico, com soluções populares como o conjunto 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 semelhante para casos de uso como o conjunto 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 fortemente de suas características 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 até mesmo que ele seja combinado com o Apache em algumas configurações, atuando como um proxy reverso na frente de um servidor web Apache tradicional.

Ecossistema de Suporte

O Nginx e o Apache têm forte suporte de suas respectivas equipes de desenvolvimento e comunidades. Sendo os servidores web de código aberto mais populares, os recursos de aprendizado são abundantes. O Apache é apoiado pela Apache, uma organização sem fins lucrativos, e sempre será gratuito para uso. O núcleo do Nginx é de código aberto, mas recursos desejáveis estão bloqueados atrás de sua oferta de produto Nginx Plus com recursos como verificações de integridade da origem, 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 o cache 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 sem cabeça e Jamstack surgiram em resposta. Essas soluções não exigem um servidor web auto-hospedado, em vez disso, abstraem 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 outros lugares. Para mais informações, confira este artigo sobre Jamstack com CMS sem cabeça ou implementando Jamstack de pilha completa 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 são usados e os problemas que estão tentando resolver. Equipado com esse conhecimento, você mergulhou na atual paisagem das soluções de servidores web e aplicou seu conhecimento para encontrar a solução que atende especificamente às suas necessidades. Para saber mais sobre como configurar e usar um servidor web, confira o resto da nossa série de Currículo na 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 tratamento interno 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 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 detalhada dos dois principais players no cenário de soluções de servidores web.

Produtos da DigitalOcean:

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

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