После многих часов работы nginx
с отдельными файлами, такими как robots.txt
(подсказка: каждый раз очищать кеш браузера ), я столкнулся с двумя различными способами: одним с использованием директивы alias , а другим с помощью корневой директивы, например так:
location /robots.txt { alias /home/www/static/robots.txt; }
location /robots.txt { root /home/www/static/; }
Есть ли функциональная разница между ними? Или вопросы безопасности? Есть ли конфликты с другими директивами? (Оба казались хорошими с другим / статическим местоположением). Или есть какая-то причина, чтобы выбрать одно поверх другого?
Примечание - я не использовал оба одновременно :) Скорее, я попробовал каждый, по одному, и оба работали. Я не спрашиваю, как они оба взаимодействуют в одном файле, но какой из них лучше использовать.
=
в обоих случаях, правильно? Или это относится только кroot
? Кроме того, посмотрите мое редактирование - я не хотел использовать оба сразу. :)=
в обоих случаях.Да, есть разница: с "псевдонимом" вы можете .. ну псевдоним другого имени файла, например,
в то время как
заставляет вас называть свой файл на сервере также robots.txt. Я использую первый вариант, так как мне нравится называть мои файлы роботов на моем сервере как tld.domain.subdomain-robots.txt; например
источник
Я думаю, что стоит явно указать, что nginx работает с префиксами, а не с файлами как таковыми. В первом случае
nginx заменяет префикс строки
/robots.txt
в пути URL-адреса/home/www/static/robots.txt
и затем использует результат в качестве пути файловой системы. Представленный как псевдокод, это будет что-то вроде:Так
/robots.txt
подается из-за того,/home/www/static/robots.txt
что/robots.txt
лишенный/robots.txt
префикса является пустой строкой, а добавление пустой строки/home/www/static/robots.txt
оставляет ее без изменений. Но,/robots.txt1
будет подан от/home/www/static/robots.txt1
и/robots.txt/foobar
будет подан от/home/www/static/robots.txt/foobar
. Эти файлы могут не существовать, что приводит к тому, что nginx отправляет ответ 404, и, вероятно,robots.txt
в любом случае это не каталог, но nginx заранее об этом не знает, и все это основано на строковых префиксах, а не на том, что кажется файлом или каталог по отсутствию или наличию косой черты.Тогда как во втором случае
nginx вставляет строку
/home/www/static/
в начало пути URL, а затем использует результат в качестве пути файловой системы. В псевдокоде это будет что-то вроде:Это имеет тот же результат, что и в первом случае, но по другой причине. Прерывание префикса отсутствует, но поскольку каждый путь URI должен содержать префикс
/robots.txt
, пути к файловой системе всегда начинаются с того,/home/www/static//robots.txt
что эквивалентно/home/www/static/robots.txt
.Конечно, псевдокод не совсем рассказывает всю историю, так как, например, nginx не будет слепо использовать необработанные URL-пути, как
/../../../etc/passwd
, например ,try_files
директива изменяет поведениеroot
/alias
, и существуют ограничения на то, гдеalias
можно использовать.источник
Есть разница, когда псевдоним для всего каталога.
будет работать, пока
не буду делать Это должно быть
(Легко спутать)
источник