У меня есть каталог, который иногда существует, а иногда - нет. Если требуется и существует, все файлы в нем должны быть доступны, например как это
location /my_dir {
root /other/www/root
}
Таким образом, если пользователь запрашивает http://myhost.example.com/my_dir/file
и /my_dir
существует, его следует обслуживать. Однако если каталог /other/www/root/my_dir
не существует, nginx должен действовать как если бы блок местоположения никогда не определялся и для обработки запроса используются обычные правила. В частности, клиент не должен знать об этом специальном правиле, если каталог в настоящее время не существует, то есть для него не должно быть видимого для пользователя индикатора.
Одна из идей заключалась в том, чтобы поместить конфигурацию по умолчанию в указанное место и изменить приведенные выше строки на следующие (см. Как написать DRY, модульную конфигурацию nginx (обратный прокси) с именованными местоположениями):
location /my_dir {
root /other/www/root
try_files $uri $uri/ @default;
}
location / {
error_page 418 = @default;
return 418;
}
location @default {
# all default stuff like the default root, index etc. goes here
}
Есть ли в этом смысл или есть лучший способ?
Обновить
Вот два примера конфигурации для nginx:
# Example 1
server {
listen 80;
listen [::]:80;
server_name www.example.com example.com
root /var/www/www.example.com
index index.html index.htm
}
# Example 2
server {
listen 80;
listen [::]:80;
server_name www.example.com example.com
return 301 https://$server_name/$request_uri
}
В каждом случае я хотел бы добавить специальные правила для /my_dir
местоположение, но только если специальный корневой каталог /other/www/root
в настоящее время существует. В противном случае клиент не должен замечать особого отношения к /my_dir
расположение.