摘要
我有一个单一的 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;"
但是为了这个目的复制整个服务器块似乎不太DRY。我也考虑过使用if语句来检查并查看主机标头是否包含内部域。然后以这种方式提供自定义robots.txt文件。但是Nginx说If 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;
}
}