Получение Nginx для обслуживания статических файлов из нескольких источников
У меня есть конфигурация Nginx, которая отлично работает и правильно обслуживает статические файлы:
location /static/ {
alias /tmp/static/;
expires 30d;
access_log off;
}
Но сейчас я хочу сделать следующее: если статический файл не существует в /tmp/static
, Nginx ищет файл в /srv/www/site/static
. Я не знаю, как этого достичь, я попробовал несколько вещей с try_files
, но я не знаю, как правильно использовать его.4 ответа:
Вы можете установить свой корень в общий префикс двух путей, которые вы хотите использовать (в данном случае это/), а затем просто указать остальные пути в try_files args:
location /static/ { root /; try_files /tmp$uri /srv/www/site$uri =404; expires 30d; access_log off; }
Может показаться неудобным использовать root / в местоположении, но try_files гарантирует, что никакие файлы за пределами /tmp/static или /srv/www/site/static не будут обслуживаться.
Следующее должно сделать трюк:
location /static/ { expires 30d; access_log off; try_files tmp/static/$uri tmp/static/$uri/ tmp/static2/$uri tmp/static2/$uri/; }
См. http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files для документации и примеров использования try_files
Вы можете использовать именованное местоположение с "корнем" для обработки серии резервных местоположений. Обратите внимание, что вы не можете использовать "псевдоним" внутри именованного местоположения.
location / { root /path/to/primary/html; try_files $uri $uri/ @fallback; } location @fallback { root /path/to/secondary/html; try_files $uri $uri/ =404; }
Похоже, что ваши потребности будут удовлетворены с помощью SlowFS Cache Module . Он кэширует статическое содержимое во временном каталоге, который предположительно хранится на более быстрых дисках, и управляет резервным вариантом для вас.