Одно правило на все сайты

У меня 2 сайта, у каждого свой конфигурационный файл.

Возможно выполнить так, чтобы если урл через http:// либо через www Не важно какой сайт, выполнить перенаправление. Но только чтобы, если обращение по ИП, проигнорировать данный блок

server {
    if ($host = www.site.ru) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = site.ru) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    server_name site.ru www.site.ru;
    listen 80;
    return 404; # managed by Certbot
}


server {
    server_name site.ru www.site.ru;
    listen 80 default_server;
    listen [::]:80 default_server;
    return 301 https://site.ru$request_uri;
}

То есть объединить 2 блока в 1, сделать его универсальным. Только если обращение по ИП, проигнорировать блок. На ИП рассчитываю разместить панель управление phpmyadmin

server {
        server_name _;
        listen 80 default_server;
        listen [::]:80 default_server;

        if($host = "site.ru" || $host = "www.site.ru") {
            return 301 https://site.ru$request_uri;
        }

        if($host = "site1.ru" || $host = "www.site1.ru") {
            return 301 https://site1.ru$request_uri;
        }

    }
    
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

Не входит, из конфигурационных файлов, где были размещены блоки, удалила их.

При чтении, ругается на синтакс как я понимаю

if($host

Пробовала запустить без

server_name _;

Все также, ругается на туже строчку, на хост


Ответы (1 шт):

Автор решения: Ivan Shatsky

Объединить два блока можно, хотя это и не будет оптимальным решением:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    if ($host = www.site.ru) {
        return 301 https://$host$request_uri;
    }
    if ($host = site.ru) {
        return 301 https://$host$request_uri;
    }
    location / {
        return 404;
    }
    location /pma {
        # конфигурация для phpMyAdmin
    }
}
→ Ссылка