Как настроить nginx для перенаправления на url для robots.txt и sitemap.xml

Я запускаю nginx 0.6.32 в качестве прокси-интерфейса для couchdb. У меня есть файл robots.txt в базе данных, доступный как http://www.example.com/prod/_design/mydesign/robots.txt. У меня также есть файл sitemap.xml, который динамически генерируется на аналогичном URL-адресе.

Я пробовал следующую конфигурацию:

server {
  listen 80;
  server_name example.com;
  location / {
  if ($request_method = DELETE) {
    return 444;
  }
  if ($request_uri ~* "^/robots.txt") {
    rewrite ^/robots.txt http://www.example.com/prod/_design/mydesign/robots.txt permanent;
  }

  proxy-pass http://localhost:5984;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Это, похоже, работает как перенаправление, но есть ли более простой способ?

Ответ 1

Или вы можете разместить его просто в своем собственном месте -

location /robots.txt {
    alias /Directory-containing-robots-file/robots.txt;
} 

Ответ 2

Я думаю, вы хотите настроить местоположение. Ключевой частью является директива "=".

location = /robots.txt {
    alias /your_full_path/robots.txt ;
}

(Когда я не включил =, он по-прежнему попадал в исходное местоположение nginx по умолчанию)

Настройка, как показано ниже, приведет к тому, что все запросы /robots.txt* будут считаны из /var/foo. Таким образом, /robots.txt.bing пытается прочитать /var/foo/robots.txt.bing с диска. "^ ~" Указывает, что это соответствие регулярного выражения в начале запроса.

location ^~ /robots.txt {
    root /var/foo;
}

Ответ 3

переписать с помощью http://... для выполнения перенаправления. Вероятно, вы ищете:

rewrite ^/robots.txt /prod/_design/mydesign/robots.txt last;

Ответ 4

Это также должно работать и может немного улучшиться.

location /robots.txt { alias /var/www/django/mysite/static/robots.txt; }

Ответ 5

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

location / {
    rewrite ^/robots\.txt$ /static/robots.txt last;
    ...
}

NginxHttpRewriteModule

Ответ 6

Учитывая, что robots.txt находится в /var/www/mysite/static/robots.txt, для меня работало следующее:

location = /robots.txt {
    root /var/www/mysite/static/;
}