Después de muchas horas nginxpara 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.txten la ruta URL con/home/www/static/robots.txty luego usa el resultado como una ruta del sistema de archivos. Representado como pseudocódigo, esto sería algo así como:Por
/robots.txtlo tanto, se sirve/home/www/static/robots.txtporque/robots.txtdespojado del/robots.txtprefijo es la cadena vacía, y agregar la cadena vacía para/home/www/static/robots.txtdejarla sin cambios. Pero,/robots.txt1sería servido desde/home/www/static/robots.txt1y/robots.txt/foobarserí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.txtno 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.txtque 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_filesdirectiva cambia el comportamiento deroot/alias, y existen restricciones sobre dóndealiasse 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