Depois de muitas horas nginx
servindo arquivos únicos, como robots.txt
(dica: limpe o cache do navegador toda vez), acabei com duas maneiras diferentes, uma usando a diretiva de alias e outra usando a diretiva de raiz , da seguinte maneira:
location /robots.txt { alias /home/www/static/robots.txt; }
location /robots.txt { root /home/www/static/; }
Existe alguma diferença funcional entre os dois? Ou questões de segurança? Algum conflito com outras diretrizes? (Ambos pareciam bem com outro local / estático). Ou algum motivo para escolher um sobre o outro?
Nota - Não usei os dois ao mesmo tempo :) Tentei cada um, um de cada vez, e ambos funcionaram. Não estou perguntando como os dois interagem juntos no mesmo arquivo, mas qual seria melhor usar.
=
em ambos os casos, correto? Ou apenas se aplica aroot
? Além disso, veja minha edição - não pretendia usar os dois ao mesmo tempo. :)=
nos dois casos.Sim, há uma diferença: com "alias", você pode ... bem, alias para outro nome de arquivo, como
enquanto que
força você a nomear seu arquivo no servidor e também robots.txt. Eu uso a primeira opção, pois gosto de nomear meus arquivos de robôs no meu servidor como tld.domain.subdomain-robots.txt; por exemplo
fonte
Eu acho que vale a pena explicar explicitamente que o nginx está operando em prefixos e não em arquivos por si só. No primeiro caso,
O nginx substitui o prefixo da string
/robots.txt
no caminho da URL/home/www/static/robots.txt
e depois usa o resultado como um caminho do sistema de arquivos. Representado como pseudocódigo, isso seria algo como:Assim,
/robots.txt
é veiculado/home/www/static/robots.txt
porque/robots.txt
o/robots.txt
prefixo despojado é a sequência vazia e anexa a sequência vazia para/home/www/static/robots.txt
deixá-la inalterada. Mas,/robots.txt1
seria servido de/home/www/static/robots.txt1
e/robots.txt/foobar
seria servido de/home/www/static/robots.txt/foobar
. Esses arquivos podem não existir, fazendo com que o nginx envie uma resposta 404, e provavelmenterobots.txt
não é um diretório, mas o nginx não sabe disso com antecedência, e tudo isso é baseado em prefixos de string e não no que parece ser um arquivo ou diretório pela ausência ou presença de uma barra final.Considerando que, no segundo caso,
O nginx insere a sequência
/home/www/static/
no início do caminho da URL e, em seguida, usa o resultado como um caminho do sistema de arquivos. No pseudocódigo, isso seria algo como:Isso tem exatamente o mesmo resultado que o primeiro caso, mas por um motivo diferente. Não há remoção de prefixo, mas como todo caminho de URI deve conter o prefixo
/robots.txt
, os caminhos do sistema de arquivos sempre começarão com o/home/www/static//robots.txt
que é equivalente/home/www/static/robots.txt
.Obviamente, o pseudocódigo não conta a história toda, como, por exemplo, o nginx não usa cegamente caminhos de URL brutos como
/../../../etc/passwd
, atry_files
diretiva altera o comportamento deroot
/alias
e há restrições sobre ondealias
pode ser usado.fonte
Há uma diferença, quando o alias é para um diretório inteiro.
vai funcionar, enquanto
não vai fazer. Isso teria que ser
(Fácil de confundir)
fonte