Esta é uma pergunta padrão de "arquitetura de segurança da Web".
Um aplicativo típico de três camadas terá
- camada da Web
- camada de aplicativo
- Camada de banco de dados (ou outro back-end).
A ideia é ajudar a segregar os deveres.
Assim, a "camada web" é o ponto de terminação inicial de todo o tráfego de entrada. Você pode ter seu material SSL feito aqui. Neste ponto, você pode injetar coisas como "Firewalls de aplicativos da Web", que podem inspecionar o tráfego de entrada em busca de itens que se assemelham a ataques de injeção de SQL ou ataques de passagem de caminho e assim por diante.
A vantagem de terminar aqui é que os serviços front-end, como o apache ou o nginx ou o lighttpd, são dedicados ao tratamento de tráfego não autorizado, ao registro de solicitações incorretas, à mais "segurança". Alguém surge com uma nova maneira de atacar os servidores da Web (fragmentação de dados com um conjunto de bits TCP inválido?) E você terá certeza de que os principais servidores da Web serão corrigidos; o seu framework web pode não estar tão no topo das coisas.
Apenas o tráfego "limpo" é passado para a camada de aplicativo (essa comunicação também pode ser HTTP, mas de uma fonte mais confiável). E seu aplicativo pode conversar com o backend.
Agora, idealmente, essas camadas também estariam em servidores diferentes com regras de roteamento de rede, de modo que o "servidor de aplicativos" não possa ser acessado de forma alguma a partir do serviço de solicitação externo. A única maneira que o tráfego pode chegar ao seu servidor de aplicativos é por meio do servidor Web front-end, mesmo em uma camada TCP mais baixa. Mas mesmo sem isso, você pode ganhar algumas vantagens de segurança.
Vantagem secundária significa que seu serviço front-end pode ser um proxy HA, distribuindo carga para vários servidores de aplicativos de back-end.
Vantagens terciárias permitirão que você forneça arquivos estáticos (por exemplo, imagens, CSS, javascript) do servidor Web front-end e apenas o material pesado específico do aplicativo será passado para o seu aplicativo. Você pode adicionar camadas de cache e assim por diante. Pode haver benefícios de desempenho aqui.
Assim, do ponto de vista da empresa, há muitos bons motivos para separá-los. Mas requer mais trabalho para configurar e configurar.
Quão longe você quer ir é uma preferência pessoal.