1 votes

Changer l'emplacement unique basé sur le nom du serveur dans Nginx

J'ai une entrée de serveur sur mes configurations avec environ 50 entrées de localisation. J'ai besoin de définir un autre domaine sur mon serveur avec la même configuration, sauf pour un emplacement.

par exemple, j'ai

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

}

J'ai besoin de faire quelque chose comme

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

si c'est possible, je veux éviter d'extraire toute la configuration dans un snippet et de l'inclure ensuite dans deux entrées de serveur, une pour le domaine principal et une pour le sous-domaine.

Je sais que le code que j'ai copié ne fonctionne pas et j'ai lu si c'est le mal

ce qui suggère quelque chose

    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;
    }

Mais ensuite j'obtiens the "alias" directive cannot be used inside the named location

1voto

HugoFS Points 313

Vous obtiendrez une solution plus propre avec un map et un try_files déclaration.

Par exemple :

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

server {
    ...

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

    ...
}

参照 ce document pour les détails.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X