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 combinação complexa de recursos montados juntos. Se você deseja hospedar sua aplicação web na internet, em muitos casos, 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
, começa entrando em um 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 à 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 no momento ou servidos estáticamente. 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 está instalado, 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 de servidores de aplicativos (por exemplo, Gunicorn) e 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 de usuários, frequentemente concurrentemente.
- Dirige correspondência e reescrita de URL.
- Processa e serve conteúdo dinâmico.
- Comprime conteúdo para otimização de uso de dados e velocidade.
- 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ê deseja criar um site.
- Você deseja criar uma aplicação 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 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 viável de servidor web, devem ser considerados os seguintes aspectos:
- 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 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 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 patiente o carregamento inicial, cada carregamento longo subsequente irá exponencialmente diminuir 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 para um rastejo e todo o servidor se crashes. 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 de configuração: Colocar um projeto no ar 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 vários servidores web posteriores quando você escala.
- Documentação: Servidores web são complexos. As configurações mais comuns podem rapidamente colocar você no caminho certo, mas suas necessidades crescerão ao longo do tempo. Muitas vezes, você precisará de recursos que não são tão comumente usados. Quando esse tempo chegar, uma boa documentação é essencial para criar soluções personalizadas para suas necessidades.
- Suporte de 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 a curto prazo imediato que eles fornecem na forma de correções de bugs e patches.
- Suporte da comunidade : Uma equipe de desenvolvimento central lidará com a maioria das tarefas pesadas, mas uma comunidade vibrante 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 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 foi o primeiro, e foi construído em um momento quando era comum que múltiplos websites com seus próprios arquivos de configuração individuais existissem 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 servidor e, em vez disso, se dirigiram para servir um website de um servidor de maneira extremamente eficiente sob carga.
Servidores web compartilham os mesmos objetivos e problemas, porém 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. Nginx e 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 metodologia de avaliação permanece firme pelos seus próprios requisitos.
Aqui estão alguns diferenciadores-chave em 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 servidores 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 para 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 granular de controle. 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.
Gerenciamento de 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 fundamentalmente gerencia 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 do 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 ao gerar 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 em si é 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 tão rapidamente e eficientemente 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á solicitando, o conteúdo é referido como dinâmico. Por exemplo, após fazer login em um site, o site geralmente preenche 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 solicitaçõ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 cacheado 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 language agnostic, mas requer bibliotecas externas, como 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. Uma proxy reversa torna-se a gateway que direciona o tráfego entre servidores web e a internet em geral, e frequentemente é a camada que interfaces 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 múltiplos servidores web tradicionais atrás de uma proxy reversa Nginx, utilizando o Nginx para determinar qual servidor web deve enviar a solicitação com base na carga ou configuração de regras. Este papel intermediário 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 comunidade 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 do 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 qualquer momento para responder a uma solicitação HTTP recebida, então um servidor web realiza essa tarefa de melhor forma. À medida que se afasta da ênfase em atender a solicitações HTTP, os servidores web se tornam menos de uma solução ideal. Isso é especialmente verdadeiro para as funcionalidades auxiliares que os servidores web fornecem. Por exemplo, recursos como cacheamento 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, abstragem 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, confira este artigo sobre Jamstack com CMS sem cabeça ou implantação de Jamstack full stack com a Plataforma de Apps da DigitalOcean.
Conclusão
Neste artigo, você passou por um breve currículo básico sobre o que são os servidores web, como eles são usados e os problemas que tentam resolver. Equipado com este conhecimento, você mergulhou na situação atual das soluções de servidores web e aplicou seu conhecimento para encontrar a solução que se adapta às suas necessidades específicas. Para aprender mais sobre como configurar e usar um servidor web, veja o resto da nossa série de currículos 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 processamento interno de páginas web dinâmicas com integração com linguagens de programação populares, como o 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, serviço de ativos estáticos, atuando como um proxy inverso e lidando com tráfego de alta concorrência.
- Apache vs Nginx: Considerações Práticas: Uma análise mais profunda dos dois maiores jogadores na paisagem de soluções de servidores web.
Produtos da DigitalOcean:
- Droplets da DigitalOcean: 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 dos servidores, concentre-se no seu código de aplicação.
Source:
https://www.digitalocean.com/community/conceptual_articles/web-servers-introduction