Opção 1.
Use três server
blocos (como mencionado em sua pergunta), mas descarregar o conteúdo duplicado em um arquivo separado, usando uma diretiva include
para puxá-lo para cada um dos blocos server
relevantes. Consulte este documento para obter detalhes.
Opção 2.
O default_server
não precisa de uma instrução server_name
. No entanto, você deve trocar o default_server
pelo outro bloco server
, para que o primeiro bloco server
se torne o mais específico.
Por exemplo:
server{
listen 80;
listen [::]:80;
server_name hostname.external_domain;
return 301 https://$host$request_uri;
}
server {
listen 80 default_server;
listen 443 ssl default_server;
listen [::]:80 default_server;
listen [::]:443 ssl default_server;
...
}
O segundo server_block
não precisa corresponder usando server_name
, pois corresponderá a qualquer coisa que o primeiro bloco server
não corresponda explicitamente.