Como definir o robots.txt globalmente em nginx para todos os hosts virtuais

7

Estou tentando definir robots.txt para todos os hosts virtuais no servidor http nginx. Eu consegui fazer isso no Apache colocando o seguinte no main httpd.conf :

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

Eu tentei fazer algo parecido com o nginx adicionando as linhas abaixo (a) dentro do nginx.conf e (b) como conf.d / robots.conf

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

Eu tentei com '=' e até coloquei em um dos hosts virtuais para testá-lo. Nada parecia funcionar.

O que estou perdendo aqui? Existe outra maneira de conseguir isso?

    
por anup 29.10.2013 / 09:06

4 respostas

4

o local não pode ser usado dentro do bloco http . O nginx não possui aliases globais (isto é, aliases que podem ser definidos para todos os vhosts). Salve suas definições globais em uma pasta e inclua-as.

server {
  listen 80;
  root /var/www/html;
  include /etc/nginx/global.d/*.conf;
}
    
por 29.10.2013 / 13:36
28

Você pode definir o conteúdo do arquivo robots.txt diretamente na configuração do nginx:

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

Também é possível adicionar o tipo de conteúdo correto:

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

Existem outras regras definidas? Talvez o common.conf ou outro arquivo conf incluído inclua a sua configuração. Um dos seguintes deve funcionar definitivamente.

location /robots.txt { alias /home/www/html/robots.txt; }
location /robots.txt { root /home/www/html/;  }
  1. O Nginx executa todos os locais "regexp" na ordem de sua aparência. Se qualquer local "regexp" for bem-sucedido, o Nginx usará essa primeira correspondência. Se nenhum local "regexp" foi bem-sucedido, o Nginx usa o local comum encontrado na etapa anterior.
  2. os locais "regexp" têm precedência sobre os locais "prefixo"
por 29.10.2013 / 12:01
0

Eu tive o mesmo problema com os desafios do jogo, mas o mesmo princípio se aplica ao seu caso também.

O que fiz para resolver esse problema foi mover todos os meus sites para uma porta não padrão, escolhi 8081 e criei um servidor virtual escutando na porta 80. Ele faz proxy de todas as solicitações para 127.0.0.1:8081 , exceto o aqueles para .bem conhecido. Isso funciona quase como um alias global, com um salto extra, mas isso não deve causar uma queda significativa no desempenho devido à natureza assíncrona do nginx.

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;
  }
}
    
por 04.07.2018 / 23:54