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 inserindo 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 à 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 ou servidos estaticamente. Se você pretende trabalhar com sites ou aplicativos online em qualquer capacidade, é 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 está instalado, 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
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.
- Trata solicitações de usuários, frequentemente de forma concorrente.
- Direciona correspondência e reescrita de URLs.
- Processa e serve conteúdo dinâmico.
- Comprime conteúdo para uso otimizado 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ê 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 solicitações de API 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 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 digita 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 trava em momentos aleatórios afeta adversamente 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 de 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 manuseio de múltiplas 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 uma rasteira 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.
- Escalabilidade: Escalabilidade refere-se a tornar os seus servidores existentes mais poderosos através da escalabilidade vertical, ou adicionar mais servidores à sua configuração através da escalabilidade horizontal. À medida que aumenta a sua audiência, pode chegar a um ponto em que precisa de mais do que um ou dois pequenos servidores web.
- Fácil 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 configura, e para os vários servidores web posteriormente quando aumenta a escala.
- Documentação: Os servidores web são complexos. As configurações mais comuns irão ajudá-lo a dar os primeiros passos rapidamente, mas as suas necessidades irão crescer ao longo do tempo. Muitas vezes precisará de funcionalidades que não são tão comumente usadas. Quando chegar esse momento, uma boa documentação é essencial para criar soluções personalizadas para as suas necessidades.
- Suporte do desenvolvedor: Se os desenvolvedores principais não estão comprometidos com o seu próprio projeto, você não deve comprometer o seu projeto com o deles. Isso inclui tanto planos de suporte a longo prazo para o 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 central lidará com a maioria das tarefas mais pesadas, 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 os seus problemas específicos.
Embora os servidores web possam oferecer diferentes soluções, as soluções que eles oferecem derivam de tentativas de resolver os mesmos problemas. Esses problemas em si evoluem ao longo do tempo junto com as necessidades e expectativas do usuário final, tornando isso uma lista em constante evolução e em constante mudança.
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 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 das 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 é uma questão estrutural opinativa que divide os produtos de servidor 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, em vez disso, concentram-se em servir eficientemente um único site. Essas configurações dependem da correspondência de padrões de URI, que é a correspondência de URLs com nomes de arquivos e outros identificadores únicos, 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 recurso, e todas as decisões de design fluem dessa concentração 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. A forma 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 tratamento de solicitações baseado em 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 de 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 comprimir esse conteúdo estático para obter melhores tempos de carregamento.
O Nginx se destaca no fornecimento de 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 o solicita, o conteúdo é referido como 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 força o servidor web a lidar com muitas solicitações de forma ú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 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ções populares como o 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 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 fortemente 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 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.
Ecosistema de Suporte
Tanto o Nginx quanto o Apache têm forte apoio 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 trancados atrás de sua oferta de 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 pronto o tempo todo 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 fornecidos pelos servidores web. 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 headless e Jamstack surgiram em resposta. Essas soluções não exigem 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 outras áreas. 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 um guia básico 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 paisagem atual das soluções de servidor web e aplicou seu conhecimento para encontrar a solução que se adequa às suas necessidades especificamente. 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 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 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, 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 panorama das soluções de servidor 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, concentre-se no código da sua aplicação.
Source:
https://www.digitalocean.com/community/conceptual-articles/introduction-to-web-servers