Я хочу создать файл robots.txt с помощью Varnish 2.1.
Что означает, что domain.com/robots.txt
подается с использованием лака, а также subdomain.domain.com/robots.txt
также подается с использованием лака.
Файл robots.txt должен быть жестко закодирован в файле default.vcl. это возможно?
Я знаю, что Varnish может генерировать страницу обслуживания при ошибке. Я пытаюсь создать файл robots.txt. Кто-нибудь может помочь?
sub vcl_error {
set obj.http.Content-Type = "text/html; charset=utf-8";
synthetic {"
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Maintenance in progress</title>
</head>
<body>
<h1>Maintenance in progress</h1>
</body>
</html>
"};
return (deliver);
}
Во-первых, я не могу придумать какой-либо веской причины для этого - это определенно должно быть сделано «традиционным» способом - файл, обслуживаемый вашим веб-сервером (и, при необходимости, кэшируемый Varnish). Жесткое кодирование «файла» в конфигурации противоречит большинству практик разделения данных и конфигураций. Тем не менее, это приведет к выводу файла robots.txt на Varnish 3.0.2 (надеюсь, он работает и на Varnish 2.1), без запроса к внутреннему серверу:
sub vcl_recv {
#...
if (req.url ~ "^/robots.txt$") {
error 702 "OK";
}
#...
}
sub vcl_error {
if (obj.status == 702) {
set obj.status = 200;
set obj.http.Content-Type = "text/plain; charset=utf-8";
synthetic {"# robots.txt
User-agent: *
Disallow: /path/"};
}
return (deliver);
}
Чтобы проверить вывод (я сделал это в настройке виртуальной машины, без файла robots.txt - результатом была ошибка 404 перед использованием вышеуказанной конфигурации):
curl --head http://www.example.com/robots.txt
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 46
Accept-Ranges: bytes
Date: Tue, 20 Mar 2012 23:28:58 GMT
X-Varnish: 386675282
Age: 0
Via: 1.1 varnish
Connection: close
curl http://www.example.com/robots.txt
# robots.txt
User-agent: *
Disallow: /path/
Мне очень любопытно, как это использовать. Сообщите нам, почему вы выбрали такой подход, поскольку может быть лучшее решение проблемы.
Я не использовал лак, но это действительно не похоже на то, что он мог бы сделать. Varnish - это кеширующий прокси-сервер, а не поисковый робот. Как он «сгенерирует» файл robots.txt?
Если ваш субдомен указывает на тот же IP-адрес, что и домен, Varnish уже должен его обслуживать. Вы можете отправлять разные (под) домены в разные серверные части с помощью varnish, но если вы специально не настроили его для этого, все запросы будут отправляться в один и тот же сервер. Возможно, вам потребуется убедиться, что ваш бэкэнд правильно обслуживает разные домены.
Помещать содержимое обслуживаемых файлов в файлы конфигурации Varnish не имеет смысла. Вам нужен HTTP-сервер для обслуживания файла (который существует в файловой системе), а затем Varnish может кэшировать этот ответ, чтобы избежать попадания в бэкэнд для последующих запросов. Varnish наиболее полезен перед динамическими сгенерированными файлами и не так полезен при кешировании статических файлов, которые в любом случае уже кэшированы файловой системой.
Какую проблему вы здесь пытаетесь решить?
Просматривая документы, я обнаружил, что можно отправить ответ прямо из конфигурации, используя sub vcl_recv
и synthetic
но cyberx86 превзошел меня в написании реального ответа.
Цель того, чтобы Varnish мог отправлять ответы, которые он не получил от вышестоящего сервера, состоит в том, что иногда вы не получаете ответа от вышестоящего сервера. Varnish должен иметь собственные 502 и / или 504 ответа.
Это по-прежнему не имеет особого смысла для файла robots.txt, даже если это технически возможно.