Nginx: разные роботы.txt для домена alternte

резюме

у меня есть одно веб-приложение с внутренним и внешним доменом, указывающим на него, и я хочу роботов.txt для блокировки доступа к внутреннему домену, но разрешить доступ к внешнему домену.

Проблемы

у меня есть простой серверный блок Nginx, который я использовал для прокси-сервера для приложения Django (см. ниже). Как вы можете видеть, этот серверный блок отвечает на любой домен (из-за отсутствия имя_сервера параметр.) Тем не менее, мне интересно, как отмечать конкретные Домены, такие Nginx будут обслуживать пользовательских роботов.тхт файла для них.

более конкретно, скажем, Домены example.com и www.example.com будет обслуживать роботов по умолчанию.txt-файл из каталога htdocs. (Так как "root / sites/mysite / htdocs" установлен и роботы.txt-файл находится по адресу/sites/mysite/htdocs / robots.txt)

но, я также хочу домен "example.internal.com "(который относится к тому же серверу, что и example.com) иметь пользовательских роботов.txt файл служил; я хотел бы создать пользовательские роботы.txt, поэтому google не индексирует этот внутренний домен.

Я подумал о дублировании серверного блока и указании следующего в одном из серверных блоков. А потом как-то перекрывает роботов.поиск txt в этом блоке сервера.

"server_name internal.example.com;"

но дублирование всего серверного блока только для этой цели не кажется очень сухим.

Я также думал об использовании оператор if для проверки и проверки, содержит ли заголовок узла внутренний домен. А потом обслуживаем роботов на заказ.текстовый файл таким образом. Но Nginx говорит Если Есть Зло.

Что такое хороший подход для обслуживания пользовательских роботов.txt файл для внутреннего домена?

Спасибо за вашу помощь.

вот пример кода серверного блока, который я использую.

upstream app_server {
  server unix:/sites/mysite/var/run/wsgi.socket fail_timeout=0;
}

server {
  listen 80;

  root /sites/mysite/htdocs;    

  location / {
      try_files $uri @proxy_to_app;
  }

  location @proxy_to_app {
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header X-Forwarded-Protocol $scheme;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Scheme $scheme;
     proxy_set_header Host $http_host;
     proxy_redirect off;
     proxy_pass   http://app_server;
  }
}

1 ответов


можно использовать map для определения условной переменной. Добавьте это за пределами ваша директива сервера:

map $host $robots_file {
    default robots.txt;
    internal.example.com internal-robots.txt;
}

тогда переменная может использоваться с try_files такой:

server_name internal.example.com;

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

теперь вы можете иметь два робота.txt файлы в корень:

robots.txt
internal-robots.txt