Рейтинг:0

NGINX try_files across multiple drives on Windows

флаг us

I am moving nginx out of a Linux VM to the Windows host for performance reasons and I'm having trouble with this part.

On Linux the configuration is:

root /;

try_files /mnt/m$uri /mnt/d$uri /mnt/l$uri =404;

Where /mnt/m, /mnt/d and /mnt/l are the mount points of the M:, D: and L: drives respectively.

On Windows I tried

root /;

try_files M:$uri D:$uri L:$uri =404;

but it throws this error

*1 GetFileAttributesEx() "C:L:/[...]" failed (123: The filename, directory name, or volume label syntax is incorrect)

It seems / is interpreted as the C: drive, it's the drive that nginx runs from. I also tried root ; and leaving the root directive out altogether but nothing worked.

Ivan Shatsky avatar
флаг gr
Не уверен, что это вообще возможно. Если вам действительно нужна эта функциональность, почему бы не использовать точки монтирования NTFS для разных жестких дисков?
erik avatar
флаг us
@IvanShatsky На самом деле это было возможно только через конфигурацию, но это довольно хакерское решение. Я понятия не имел, что в NTFS есть точки монтирования, это спасло бы меня от стресса.
Рейтинг:0
флаг us

Мне удалось сделать это путем вложения (?) названных мест. Однако будьте осторожны, так как любые заголовки/параметры, которые вы установили в основном блоке местоположения, не будут применяться в именованных местоположениях, по крайней мере, по моему опыту. Решение @IvanShatsky с точками монтирования NTFS кажется намного лучше.

место расположения /  {
    корень "М:\";
    try_files $uri $uri/ @ddrive;

}

местоположение @ddrive {
    корень "D:\";
    try_files $uri $uri/ @ldrive;
}

местоположение @ldrive {
    корень "L:\";
    try_files $uri $uri/ =404;
}
Ivan Shatsky avatar
флаг gr
Я не думаю, что вам действительно нужен компонент `$uri/` директивы `try_files`. Он используется только для проверки того, является ли `$uri` каталогом, содержащим какой-либо индексный файл, и его не было в исходной конфигурации. Несколько слов о наследовании заголовков/опций.Если у вас есть несколько общих заголовков/параметров с общим расположением, вы можете переместить эти определения на один уровень выше, но вы не можете определить дополнительный заголовок внутри расположения без потери всего наследования заголовков с предыдущего уровня. То есть ничего не определять и наследовать все или определить все.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.