Как заставить nginx прекратить обработку других правил и выполнить определенное местоположение?
У меня есть этот конфиг, который работает как положено в пустом определении server { }
location ^~ /foo/ {
alias /var/www/foo/;
}
Но когда я перенесу это в значительно большее определение сервера (которое используется для многосайтовой конфигурации WordPress), оно перестанет работать, и WordPress ответит на него (что, очевидно, не было моей целью).
Я пытался поставить в начале или в конце блока сервера, но это не изменило его.
Как я могу заставить Nginx использовать это место?
Ответы
Ответ 1
Вы, вероятно, ищете break
.
location ^~ /foo/ {
alias /var/www/foo/;
break;
}
Из документации HttpRewriteModule
:
last
- завершает обработку текущих директив перезаписи и перезапускает процесс (включая переписывание) с поиском совпадения по URI из всех доступных местоположений.
break
- завершает обработку текущих директив перезаписи, и обработка без перезаписи продолжается только в пределах текущего блока местоположения.
Обратите внимание, что внешние блоки местоположения, last и break по сути одинаковы.
Ответ 2
Блоки местоположения в Nginx являются эксклюзивными. Если вы используете location ^~
, тогда другие правила, вероятно, заканчивают заголовки для статических объектов, не будут применяться, если вы не скопируете эти правила как вложенные в один и тот же блок местоположения.
Если вы можете поделиться своей полной конфигурацией, я могу заставить ее работать на вас. Скорее всего, вам нужно использовать вложенные блоки местоположения.
Ответ 3
location = /aliasname/ {
alias /path/to/alias/
}
Конечная косая черта будет проблемой, если она отсутствует в URI.
См. https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms#matching-location-blocks