Nginx:交替域的不同robots.txt

概要

我有一个内部和外部域指向它的单个Web应用程序,我想要一个robots.txt阻止所有访问到内部域,但允许所有访问外部域。

问题细节

我有一个简单的Nginx服务器块,我用它代理Django应用程序(见下文)。 正如你所看到的,这个服务器块响应任何域(由于缺lessserver_name参数)。 不过,我想知道如何标记特定的域名,例如Nginx会为他们提供一个自定义的robots.txt文件。

更具体地说,域example.com和www.example.com将从htdocs目录提供默认的robots.txt文件。 (由于设置了“root / sites / mysite / htdocs”,robots.txt文件位于/sites/mysite/htdocs/robots.txt)

但是,我还希望域“example.internal.com”(指与example.com相同的服务器)具有自定义robots.txt文件服务; 我想创build一个自定义robots.txt,所以谷歌不索引该内部域。

我想过复制服务器块,并在其中一个服务器块中指定以下内容。 然后以某种方式覆盖该服务器块中的robots.txt查找。

"server_name internal.example.com;" 

但是为了这个目的复制整个服务器块看起来不太干。

我也想过使用if语句来检查主机头是否包含内部域。 然后以这种方式提供自定义的robots.txt文件。 但Nginx说如果是邪恶的 。

为内部域提供自定义robots.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; } } 

你可以使用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; } 

现在,您可以在根目录中拥有两个robots.txt文件:

 robots.txt internal-robots.txt