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 inserindo uma URL que inicia uma solicitação pela 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 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 experiencie 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 qualquer forma, é extremamente útil familiarizar-se 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 de 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 tratadas por servidores web:
- Serve arquivos HTML, CSS e JavaScript.
- Serve imagens e vídeos.
- Gerencia mensagens de erro HTTP.
- Gerencia solicitações de usuários, frequentemente de forma concorrente.
- Direciona correspondência e reescrita de URL.
- Processa e serve conteúdo dinâmico.
- Compacta conteúdo para uso de dados otimizado 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 um aplicativo que se conecte à 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 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 um público com expectativas de velocidade, disponibilidade, confiabilidade e muito mais. Eles têm um propósito compartilhado de servir conteúdo na internet e, para serem considerados uma solução de servidor web viável, 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 toda vez 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 que falha 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 sua solicitação seja atendida 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 tratamento de várias solicitações chegando ao mesmo tempo. Ter muitas pessoas tentando visitar seu site ao mesmo tempo parece ser algo bom, mas isso se torna um problema real quando os tempos de carregamento diminuem drasticamente e todo o seu servidor trava. Seu servidor físico ou virtual tem apenas tantos recursos, como RAM e poder de computação da CPU, e os servidores web devem usar esses recursos de forma eficiente.
- Escala: Escalabilidade refere-se a tornar seus servidores existentes mais poderosos através de escalabilidade vertical, ou adicionar mais servidores à sua configuração através de escalabilidade 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: 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 múltiplos servidores web posteriormente, quando você escala.
- Documentação: Servidores web são complexos. As configurações mais comuns o colocarão em pé rapidamente, mas suas necessidades crescerão com o tempo. Muitas vezes, você precisará de recursos que não são tão comumente usados. 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 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 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 os 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 desenvolvido numa é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 vários sites a partir de um único servidor e, em vez disso, se voltaram para servir um único site a partir de um 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 manter suas próprias necessidades em mente para o seu projeto específico. Dessa forma, mesmo que o panorama das ofertas de servidores web mude, seu método de avaliação permanece fundamentado em seus próprios requisitos.
Aqui estão algumas características diferenciadoras em 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 nível granular de controle em um nível de sistema de arquivos, o que decorre da necessidade de hospedar vários sites em um único servidor. As configurações centralizadas não se concentram em hospedar vários sites em um único servidor, e sim se concentram 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 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 um recurso, e cada decisão de design flui a partir 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 se concentra na correspondência de padrões de URI e em uma configuração centralizada.
Manuseio 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 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 para lidar com múltiplas 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 tratamento de eventos do Nginx usa menos recursos e pode ser mais eficiente sob carga.
Atendendo Conteúdo Estático
Além de páginas da web, 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 melhorar os tempos de carregamento.
O Nginx se destaca ao atender conteúdo estático devido ao seu tratamento de solicitações baseado em eventos. O Apache também pode atender 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 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 força o servidor web a lidar com muitas solicitações de maneira única no momento em que as recebe. Conteúdo adaptado 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 encaminhar 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 PHP-FPM para agir como uma solução semelhante 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 real do mundo depende muito 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 configuração de regras. Esse papel intermediário permite até mesmo que ele seja emparelhado 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 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 será sempre 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 integridade 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 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 ao dedicar recursos de desenvolvimento para gerenciar servidores web, soluções como serverless, CMS sem interface 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 exigem 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 sem interface ou implementando Jamstack full stack com a plataforma de aplicativos da DigitalOcean.
Conclusão
Neste artigo, você passou por um guia básico 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 no cenário atual das soluções de servidores web e aplicou seu conhecimento para encontrar a solução que atende às suas necessidades especificamente. Para saber mais sobre como configurar e usar um servidor web, confira o resto 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 seu primeiro servidor Apache. Esta solução se destaca com configuração descentralizada para controle granular e tratamento interno de páginas da web dinâmicas com conexões a 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 aprofundada dos dois principais players no cenário de soluções de servidores web.
Produtos da DigitalOcean:
- DigitalOcean Droplets: Servidores privados virtuais para você testar e implantar servidores web.
- Funções da DigitalOcean: Solução serverless que pode ser uma alternativa aos servidores privados virtuais. Pule a manutenção de servidores e concentre-se no código da sua aplicação.
Source:
https://www.digitalocean.com/community/conceptual-articles/introduction-to-web-servers