我怎样才能使用清漆生成robots.txt文件,即使是同一网站的子域?

我想使用Varnish 2.1生成一个robots.txt文件。

这意味着domain.com/robots.txt是使用Varnish服务的,而且subdomain.domain.com/robots.txt也是使用Varnish服务的。

robots.txt必须硬编码到default.vcl文件中。 那可能吗?

我知道清漆会产生错误的维护页面。 我试图让它生成一个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); } 

首先,我想不出任何合理的理由来做这件事 – 一定要按照传统的方式来完成 – 一个由你的networking服务器提供的文件(如果需要的话,由Varnishcaching)。 在一个configuration文件中对一个“文件”进行硬编码是违背了大多数试图保持数据和configuration分离的做法。 也就是说,这将在Varnish 3.0.2上输出一个robots.txt文件(希望它也可以在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); } 

要validation输出(我在虚拟机设置中做了这个,没有robots.txt文件 – 在使用上面的configuration之前,结果是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/ 

对于这个用例我非常好奇。 请让我们知道为什么你采取这种方法,因为可能有更好的解决scheme。

我没有使用清漆,但是这听起来不像是可以做到的。 Varnish是一个caching代理服务器,而不是一个networking爬虫。 它将如何“生成”robots.txt文件?

如果您的子域指向与域相同的IP地址,则清漆应该已经提供。 您可以使用varnish将不同的(子)域发送到不同的后端,但是如果您没有专门configuration它来完成此操作,那么所有请求都将转到相同的后端。 您可能需要确保您的后端将正确地服务于不同的域。

把要提交的文件内容写入Varnishconfiguration文件是没有意义的。 您需要一个HTTP服务器来为文件(文件系统上存在的文件)提供服务,然后Varnish可以caching该响应,以避免在以后的请求中碰到后端。 清漆在dynamic的,生成的文件之前是最有用的,并且在caching已经由文件系统caching的静态文件时不是很有用。

你想在这里解决什么问题?


通过文档拖网,我发现可以直接从configuration中使用sub vcl_recvsynthetic进行响应,但是cyberx86打我写了一个实际的答案。

Varnish能够发送没有从上游服务器得到的响应的目的是,有时你根本没有从上游服务器得到响应。 清漆必须有自己的502和/或504的回应。

即使robots.txt文件在技术上是可行的,对于robots.txt文件来说仍然没有什么意义。