django – Nginx:交替域的不同robots.txt

前端之家收集整理的这篇文章主要介绍了django – Nginx:交替域的不同robots.txt前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

摘要

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

问题细节

我有一个简单的Nginx服务器块,我曾用它代理Django应用程序(见下文).如您所见,此服务器块响应任何域(由于缺少server_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文件;我想创建一个自定义robots.txt,以便google不会将该内部域编入索引.

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

"server_name internal.example.com;"

但是为了这个目的而重复整个服务器块似乎并不是很干.

我还想过可能会使用if语句来检查主机头是否包含内部域.然后以这种方式提供自定义robots.txt文件.但是NginxIf Is Evil.

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

猜你在找的Nginx相关文章