![Изменить одно местоположение на основе имени сервера в Nginx](https://rvso.com/image/760963/%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C%20%D0%BE%D0%B4%D0%BD%D0%BE%20%D0%BC%D0%B5%D1%81%D1%82%D0%BE%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BD%D0%B0%20%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5%20%D0%B8%D0%BC%D0%B5%D0%BD%D0%B8%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%20%D0%B2%20Nginx.png)
У меня есть запись сервера в моих конфигурациях с примерно 50 записями местоположений, мне нужно определить еще один домен на моем сервере с той же конфигурацией, за исключением одного местоположения.
например у меня есть
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
}
Мне нужно сделать что-то вроде
location /robots.txt {
if ($host ~ ^\w+\.\w+\.\w+$) {
# subdomains
alias /srv/robots_disallow.txt;
} else {
alias /srv/robots.txt;
}
}
Если это возможно, я хочу избежать извлечения всей конфигурации в фрагмент, а затем включения его в две записи сервера: одну для основного домена и одну для поддомена.
Я знаю, что скопированный мной код не работает, и я прочиталесли это зло
что предполагает что-то
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;
}
Но потом я получаюthe "alias" directive cannot be used inside the named location
решение1
Вы получите более чистое решение с помощью map
и try_files
утверждения.
Например:
map $host $robots {
~^\w+\.\w+\.\w+$ /robots_disallow.txt;
default /robots.txt;
}
server {
...
location = /robots.txt {
root /srv;
try_files $robots =404;
}
...
}
Видетьэтот документдля получения подробной информации.