Alterar local único com base no nome do servidor no Nginx

Alterar local único com base no nome do servidor no Nginx

Eu tenho uma entrada de servidor em minhas configurações com cerca de 50 entradas de local. Preciso definir outro domínio em meu servidor com a mesma configuração, exceto para um local

por exemplo eu tenho

server {

    # the port your site will be served on
    # the domain name it will serve for
    listen 443 ssl;
    server_name example.com sudomain.example.com;

    ssl_certificate /etc/loc/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/loc/privkey.pem; # managed by Certbot

    proxy_set_header X-Forwarded-Proto https;

    location /static/ {
        root /srv/sites/example;
    }
... # many more location defenition


}

eu preciso fazer algo como

    location /robots.txt {
        if ($host ~ ^\w+\.\w+\.\w+$) { 
            # subdomains
            alias /srv/robots_disallow.txt;
        } else {
            alias /srv/robots.txt;
        }
    }

se for possível, quero evitar extrair toda a configuração em um snippet e incluí-la em 2 entradas de servidor, uma para o domínio principal e outra para o subdomínio.

Eu sei que o código que copiei não funciona e lise é mau

o que sugere algo

    error_page 418 = @disallow_robots;
    location /robots.txt {
        alias /srv/robots.txt;

        if ($host ~ ^\w+\.\w+\.\w+$) { 
            # subdomains
            return 418;
        }
    }

    location @disallow_robots {
        alias /srv/robots_disallow.txt;
    }

Mas então eu entendothe "alias" directive cannot be used inside the named location

Responder1

Você obterá uma solução mais limpa com um mape uma try_filesdeclaração.

Por exemplo:

map $host $robots {
    ~^\w+\.\w+\.\w+$ /robots_disallow.txt;
    default          /robots.txt;
}

server {
    ...

    location = /robots.txt {
        root /srv;
        try_files $robots =404;
    }

    ...
}

Veresse documentopara detalhes.

informação relacionada