Назад | Перейти на главную страницу

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

Я хочу создать файл 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, даже если это технически возможно.