如何在 nginx 中为所有虚拟主机全局设置 robots.txt

anu*_*nup 22 nginx robots.txt

我正在尝试为robots.txtnginx http 服务器下的所有虚拟主机设置。通过将以下内容放在 main 中,我能够在 Apache 中做到这一点httpd.conf

<Location "/robots.txt">
    SetHandler None
</Location>
Alias /robots.txt /var/www/html/robots.txt
Run Code Online (Sandbox Code Playgroud)

我尝试通过在 nginx.conf 和 (b) 中添加下面给出的行 (a) 作为 include conf.d/robots.conf 来对 nginx 做类似的事情

location ^~ /robots.txt {
        alias /var/www/html/robots.txt;
}
Run Code Online (Sandbox Code Playgroud)

我试过用 '=' 甚至把它放在一个虚拟主机中来测试它。似乎没有任何效果。

我在这里缺少什么?有没有另一种方法来实现这一目标?

小智 69

您可以直接在 nginx 配置中设置 robots.txt 文件的内容:

location = /robots.txt { return 200 "User-agent: *\nDisallow: /\n"; }
Run Code Online (Sandbox Code Playgroud)

也可以添加正确的 Content-Type:

location = /robots.txt {
   add_header Content-Type text/plain;
   return 200 "User-agent: *\nDisallow: /\n";
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意:我需要放置 `location = /robots.txt` (注意等号),否则下面的另一个 `location ~* \.(txt|log)$` 匹配将覆盖它。 (2认同)

小智 10

是否定义了其他规则?可能包含的 common.conf 或另一个 conf 文件覆盖了您的配置。以下之一绝对应该有效。

location /robots.txt { alias /home/www/html/robots.txt; }
location /robots.txt { root /home/www/html/;  }
Run Code Online (Sandbox Code Playgroud)
  1. Nginx 按照它们的出现顺序运行所有“regexp”位置。如果任何“regexp”位置成功,Nginx 将使用第一个匹配项。如果没有“regexp”位置成功,Nginx 使用上一步找到的普通位置。
  2. “regexp”位置优先于“前缀”位置


小智 5

location 不能在http块内使用。nginx 没有全局别名(即可以为所有 vhost 定义的别名)。将您的全局定义保存在一个文件夹中并包含它们。

server {
  listen 80;
  root /var/www/html;
  include /etc/nginx/global.d/*.conf;
}
Run Code Online (Sandbox Code Playgroud)