Опция 1.
Используйте три server
блока (как уже упоминалось в вашем вопросе), но выгрузите дублированный контент в отдельный файл, используя include
директиву, чтобы вставить его в каждый из соответствующих server
блоков. Смотрите этот документ для деталей.
Вариант 2
default_server
Не нуждается в server_name
заявлении. Однако вы должны поменять местами default_server
другой server
блок, чтобы первый server
блок стал более конкретным.
Например:
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; ... }
Второму server_block
не нужно сопоставлять, используя a, так server_name
как оно будет соответствовать чему-либо, что в первом server
блоке не совпадает явно.