Robots.txt dosyasını tüm sanal ana bilgisayarlar için nginx'te genel olarak ayarlama


13

robots.txtNginx http sunucusu altında tüm sanal ana bilgisayarlar için ayarlamaya çalışıyorum . Aşağıdakileri anaya koyarak Apache'de yapabildim httpd.conf:

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

Confgin / robots.conf gibi (a) nginx.conf ve (b) içinde verilen satırları ekleyerek nginx ile benzer bir şey yapmayı denedim

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

'=' İle denedim ve hatta test etmek için sanal ana bilgisayarlardan birine koydum. Hiçbir şey işe yaramadı.

Burada ne eksik? Bunu başarmanın başka bir yolu var mı?


Not: Genel ayar olarak koymanın bir yolu yoktu (ör. Bir include deyimi olmadan tüm sanal ana makineler için geçerli olan bir dosyada ayarlanır). Kişi conf.d (veya global.d [standart dışı]) içinde bir robots.conf ayarlayabilir ve bunu her sanal ana bilgisayar yapılandırmasına dahil edebilir. Diğer tüm yanıtlar aynı şeyi yapmanın çeşitli yollarına işaret eder: proxy_pass, retrun {} etc.
anup

Yanıtlar:


4

konum httpblok içinde kullanılamaz . nginx'in global takma adları yoktur (yani, tüm hayaletler için tanımlanabilecek takma adlar). Global tanımlarınızı bir klasöre kaydedin ve ekleyin.

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

Soruda verildiği gibi, robots.conf komutunu conf.d klasörüne koyarak denedim. Ancak küresel olarak çalışmaz.
anup

devamı ... Dediğiniz gibi, Nginx'in global takma adı yok. Sonunda çözüm, sanal ana bilgisayar yapılandırmasına eklemekti.
anup

45

Robots.txt dosyasının içeriğini doğrudan nginx yapılandırmasında ayarlayabilirsiniz:

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

Doğru İçerik Türünü eklemek de mümkündür:

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

1
Sadece bir not: Ben koymak gerekir location = /robots.txt(Not eşittir işareti) aksi takdirde location ~* \.(txt|log)$altında başka bir maç onu geçersiz kıldı.
Beebee

Bu bir derleme nasıl eklenebilir conf.d/robots.conf? Olduğu gibi "konum" yönergesi burada izin verilmez , bu makul, ama belirli bir sunucu için değil. @ User79644 Bunun cevabından emin değilim. Bunu her siteye eklemek kaçınılmaz mı?
Pablo A

Bunu test etmedim. Ancak, takma ad yerine bir 'dönüş' kullanılması dışında söz konusu olana benzer. Karşılaştığım sorun, onu küresel bir ortam haline getirmektir. Bu, bir web sitesinin her .conf dosyasında tekrar etmemem gerektiği anlamına gelir. Global yöntemi Apache ile çalışma şeklini elde edemedim. Örneğin, taranmaması gereken bir Geliştirme sunucusu deyin.
anup

10

Tanımlanan başka kurallar var mı? Belki common.conf ya da başka bir conf dosyasında bulunan, config'e aşırı yüklenmiş. Aşağıdakilerden biri kesinlikle çalışmalıdır.

location /robots.txt { alias /home/www/html/robots.txt; }
location /robots.txt { root /home/www/html/;  }
  1. Nginx tüm "regexp" konumlarını görünüm sıralarına göre çalıştırır. Herhangi bir "normal ifade" konumu başarılı olursa, Nginx bu ilk eşleşmeyi kullanır. "Normal ifade" konumu başarılı olmazsa, Nginx önceki adımda bulunan normal konumu kullanır.
  2. "regexp" konumlarının "önek" konumlarına göre önceliği vardır

Global bir seçenek olarak çalışmaz. Ancak, bir sanal ana makinenin yapılandırması içinde çalışır. İlkini (location /robots.txt) ve hatta sözünü ettiğim ('~ * /robots.txt') kullandım. Her ikisi de Sanal Ana Bilgisayar yapılandırmasıyla çalıştı. Eğer {} '' server 'yönergesine girerse' location '' kullanımını düşünüyorum ve bu belki de küresel düzeyde işe yaramıyor.
anup

/robots.txtTakma adda bir dosyanız olduğundan emin olun . rootÇalışma seçeneğini bulamadım .
Shadoath

-1

Acme güçlükleri ile aynı sorunu yaşadım, ancak aynı prensip sizin durumunuz için de geçerlidir.

Bu sorunu çözmek için yaptığım şey, tüm sitelerimi standart olmayan 8081bir bağlantı noktasına taşımaktı 127.0.0.1:8081, 80 numaralı bağlantı noktasını dinleyen bir sanal sunucu oluşturdum . Bu neredeyse bir ekstra sıçrama ile küresel bir takma ad gibi davranır, ancak bu nginx'in asenkron doğası nedeniyle performansta önemli bir düşüşe neden olmamalıdır.

upstream nonacme {
  server 127.0.0.1:8081;
}

server {
  listen 80;

  access_log  /var/log/nginx/acme-access.log;
  error_log   /var/log/nginx/acme-error.log;

  location /.well-known {
    root /var/www/acme;
  }

  location / {
    proxy_set_header    Host                $http_host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto   $scheme;
    proxy_set_header    X-Frame-Options     SAMEORIGIN;

    # WebSocket support (nginx 1.4)
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_pass http://nonacme;
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.