Вопрос: Nginx - корень против псевдонима, для обслуживания отдельных файлов?


После многих часов nginx для подачи одиночных файлов, таких как robots.txt (Подсказка: очистить кеш браузера каждый раз), я получил два разных способа, один из которых псевдоним директиву и один, используя корень директивой, например:

location /robots.txt { alias /home/www/static/robots.txt; }
location /robots.txt { root /home/www/static/;  }

Есть ли функциональная разница между ними? Или вопросы безопасности? Любые конфликты с другими директивами? (Оба казались прекрасными с другим / статическим местоположением). Или любая причина выбрать один над другим?

Примечание. Я не использовал оба в то же время :) Скорее я пробовал каждый, по одному, и оба работали. Я не спрашиваю, как они взаимодействуют друг с другом в одном файле, но который лучше использовать.


51
2018-06-08 16:04


Источник




Ответы:


Ну, эти две директивы немного функциональны, потому что вы не используете точное совпадение в последнем случае. Так, /robots.txt1111 будет соответствовать вашему второму местоположению.
location =/robots.txt { root /home/www/static/; } является точным функциональным эквивалентом вашей первой директивы.


60
2018-06-08 16:30



Хороший момент, спасибо. Но вы можете использовать = в обоих случаях, правильно? Или это относится только к root? Также см. Мое редактирование - я не хотел использовать оба одновременно. :) - Cyclops
@Cyclops да, вы можете использовать = в обоих случаях. - Alexander Azarov
Таким образом, они были бы одинаковыми - есть ли какая-то причина выбрать одну директиву над другой? Я главный вопрос. - Cyclops
@Cyclops В принципе, такой причины нет. - Alex


Да, есть разница: с «псевдонимом» вы можете ... хорошо псевдоним к другому имени файла, например

location /robots.txt { alias /home/www/static/any-filename.txt; }

в то время как

location /robots.txt { root /home/www/static/; }

заставляет вас называть ваш файл на сервере также robots.txt. Я использую первый вариант, так как мне нравится называть мои файлы роботов на моем сервере как tld.domain.subdomain-robots.txt; например

location /robots.txt { alias /home/www/static/ch.notex.static-robots.txt; }

32
2017-09-04 16:47





Существует различие, когда псевдоним предназначен для целого каталога.

    location ^~ /data/ { alias /home/www/static/data/; }

будет работать, пока

    location ^~ /data/ { root /home/www/static/data/; }

не будет. Это должно быть

    location ^~ /data/ { root /home/www/static/; }

(Легко запутать)


0
2018-05-21 22:13