Después de muchas horas nginx
para servir archivos individuales como robots.txt
(pista: borrar el caché del navegador cada vez), terminé con dos formas diferentes, una usando la directiva de alias y otra usando la directiva raíz , así:
location /robots.txt { alias /home/www/static/robots.txt; }
location /robots.txt { root /home/www/static/; }
¿Hay alguna diferencia funcional entre los dos? O problemas de seguridad? ¿Algún conflicto con otras directivas? (Ambos parecían estar bien con otro / ubicación estática). ¿O alguna razón para elegir uno sobre el otro?
Nota: no utilicé ambos al mismo tiempo :) En cambio, probé cada uno, uno a la vez, y ambos funcionaron. No estoy preguntando cómo ambos interactúan juntos en el mismo archivo, pero cuál sería mejor usar.
=
en ambos casos, ¿correcto? ¿O solo se aplica aroot
? Además, vea mi edición: no quise usar ambos a la vez. :)=
en ambos casos.Sí, hay una diferencia: con "alias" puedes ... alias a otro nombre de archivo, como
mientras
te obliga a nombrar tu archivo en el servidor también robots.txt. Utilizo la primera opción ya que me gusta nombrar mis archivos de robots en mi servidor como tld.domain.subdomain-robots.txt; p.ej
fuente
Creo que vale la pena exponer explícitamente que nginx funciona con prefijos y no con archivos en sí. En el primer caso,
nginx reemplaza el prefijo de cadena
/robots.txt
en la ruta URL con/home/www/static/robots.txt
y luego usa el resultado como una ruta del sistema de archivos. Representado como pseudocódigo, esto sería algo así como:Por
/robots.txt
lo tanto, se sirve/home/www/static/robots.txt
porque/robots.txt
despojado del/robots.txt
prefijo es la cadena vacía, y agregar la cadena vacía para/home/www/static/robots.txt
dejarla sin cambios. Pero,/robots.txt1
sería servido desde/home/www/static/robots.txt1
y/robots.txt/foobar
sería servido desde/home/www/static/robots.txt/foobar
. Es posible que esos archivos no existan, lo que hace que nginx envíe una respuesta 404, y es probable querobots.txt
no sea un directorio de todos modos, pero nginx no lo sabe de antemano, y todo esto se basa en prefijos de cadena y no en lo que parece ser un archivo o directorio por la ausencia o presencia de una barra inclinada final.Considerando que, en el segundo caso,
nginx inserta la cadena
/home/www/static/
al comienzo de la ruta URL y luego usa el resultado como una ruta del sistema de archivos. En pseudocódigo, esto sería algo como:Esto tiene exactamente el mismo resultado que el primer caso, pero por una razón diferente. No hay eliminación de prefijos, pero dado que cada ruta URI debe contener el prefijo
/robots.txt
, las rutas del sistema de archivos siempre comenzarán con lo/home/www/static//robots.txt
que es equivalente a/home/www/static/robots.txt
.Por supuesto, el pseudocódigo no cuenta toda la historia, ya que, por ejemplo, nginx no usará ciegamente rutas de URL sin formato como
/../../../etc/passwd
, latry_files
directiva cambia el comportamiento deroot
/alias
, y existen restricciones sobre dóndealias
se puede usar.fuente
Hay una diferencia, cuando el alias es para un directorio completo.
funcionará, mientras
no lo haré Esto tendría que ser
(Fácil de confundir)
fuente