Nginx try_files (папки + файлы) откат

Учитывая эту структуру папок:

root folder
    + default
        + settings1.txt
        + settings2.txt
        ...
        + settingsN.txt
    + user00001
        + settings1.txt
        ...
    ...
    + userN
        + settings1.txt
        ...

И этот пример URL:

domain.com/user00009/settings1.txt

Или же

domain.com/xavi/somefile.txt

Я хотел бы написать правило, которое позволит мне сделать:

folder exists ? check file : 404

file exists ? serve users file : serve default file

Я пытался использовать try_files, но я думаю, что могу использовать только $ uri, я получаю полный URL, было бы здорово, если бы я мог работать со слагами ($ 1 = user00009 & $ 2 = settings1.txt)

Тогда, возможно, я мог бы поставить:

location / {
   root /...
   try_files $1/$2 default/$2 =404;
}

Любая идея?

Примечание: я знаю, что могу сервировать файлы из-за пределов nginx (в данном случае django), но я пытаюсь ускорить процесс

Ответы на вопрос(1)

Решение Вопроса
location ~ ^(/[^/]+)(/.+)$ {
  root ...;
  if (!-d "$document_root$1") {
    return 404;
  }
  try_files И этот пример URL:2 /default$2 =404;
}
 Mc-15 февр. 2012 г., 10:19
Спасибо @Alexander, я знаю, что это может быть связано с регулярными выражениями, но что если имена папок и файлов не названы шаблонами? вместо user0001: alexanderazarov и вместо settings1.txt: finance.txt?
 Mc-15 февр. 2012 г., 10:44
Кажется эта строка: if (! -D $ document_root $ 1) {выдает ошибку: S
 Alexander Azarov15 февр. 2012 г., 21:00
Спасибо! Я исправил ответ. Нет, вам не нужны косые черты, потому что регулярное выражение захватывает их. Моя рекомендация состоит в том, чтобы сохранитьerror_log уровень как минимум наnotice, И если вы установите серьезность error_log вdebugNginx будет писать много отладочной информации для каждого запроса.
 Mc-15 февр. 2012 г., 16:58
Частично работая, мне пришлось убрать пространство между ними! и -d (раньше:! _- d сейчас:! -d) в первом условии и добавить «;» после = 404. try_files не работает ... Есть ли шанс увидеть, что делает nginx? (шаг за шагом) выглядит, что он не может добраться до папок ... может быть, $ 1 и $ 2 не так? им нужен слеш? $ 1 / $ 2 /
 Alexander Azarov15 февр. 2012 г., 15:29
Есть ли проблема, чтобы сделать регулярное выражение менее конкретным? Пожалуйста, смотрите мои правки. Я обернул аргумент условия в двойные кавычки, но, честно говоря, я не уверен, что nginx позволяет$document_root в контексте. Вы лучше попробуйте эти правки, но, вероятно, вам придется написать/var/root$1 вместо

Ваш ответ на вопрос