web-dev-qa-db-ja.com

すべての仮想ホストに対してnginxでrobots.txtをグローバルに設定する方法

Nginx httpサーバーの下のすべての仮想ホストにrobots.txtを設定しようとしています。次のコードをmain httpd.confに入れることで、Apacheでそれを行うことができました。

<Location "/robots.txt">
    SetHandler None
</Location>
Alias /robots.txt /var/www/html/robots.txt

以下の行を(a)nginx.conf内に追加し、(b)conf.d/robots.confをインクルードして、nginxで同様のことを試みました

location ^~ /robots.txt {
        alias /var/www/html/robots.txt;
}

私は「=」を試してみて、それをテストするために仮想ホストの1つに配置しました。何も機能していないようです。

ここで何が欠けていますか?これを達成する別の方法はありますか?

13
anup

場所はhttpブロック内では使用できません。 nginxにはグローバルエイリアスがありません(つまり、すべての仮想ホストに定義できるエイリアス)。フォルダーにグローバル定義を保存し、それらを含めます。

server {
  listen 80;
  root /var/www/html;
  include /etc/nginx/global.d/*.conf;
}
4
user79644

Nginx設定でrobots.txtファイルの内容を直接設定できます。

    location = /robots.txt { return 200 "User-agent: *\nDisallow: /\n"; }

正しいContent-Typeを追加することもできます。

    location = /robots.txt {
       add_header Content-Type text/plain;
       return 200 "User-agent: *\nDisallow: /\n";
    }
43

定義されている他のルールはありますか?おそらくcommon.confまたは別のconfファイルが含まれているため、設定が上書きされています。次のいずれかが確実に機能するはずです。

location /robots.txt { alias /home/www/html/robots.txt; }
location /robots.txt { root /home/www/html/;  }
  1. Nginxは、すべての「正規表現」ロケーションを出現順に実行します。 「正規表現」の場所が成功した場合、Nginxはこの最初の一致を使用します。 「正規表現」の場所が成功しなかった場合、Nginxは前のステップで見つかった通常の場所を使用します。
  2. 「regexp」の場所は「prefix」の場所よりも優先されます
10
user79644