Объединить содержимое двух каталогов с помощью nginx

У меня есть

  • /сайт/приложение/активы/CSS
  • /сайт/приложение/активы/js
  • /сайт/public/активы/img
  • /сайт/общедоступные/активы/независимо

Корень веб-сайта должен быть /site/public.

Я хочу, чтобы запрос на http://example.com/assets/img переходил на /site/ public/assets/img (как по умолчанию), но я также хотел бы запросить http://example.com/assets/js, чтобы перейти к /site/app/assets/js .

Причина этого заключается в том, что производственный сервер может затем обработать исходные коды в папке приложения, поместить их в другую папку, локальную только для рабочего сервера (вне контроля версий), а затем на сервере папку, содержащую обработанные вместо этого активы будут объединены.

Я думаю, что должен быть способ, но я не могу понять его.

Спасибо.


person Tom Jenkinson    schedule 18.09.2014    source источник


Ответы (1)


Вам нужно установить альтернативу root для желаемых местоположений. Как это.

server {

    listen 80;
    server_name localhost;

    root /var/www/site/public;

    location ~ /assets/(css|js)/ {
      root /var/www/site/app;
    }

}
person saaj    schedule 18.09.2014
comment
Спасибо, я вижу, что это сработает в этом случае, но знаете ли вы, какое решение было бы, если бы папка в папке приложения не называлась активами или URL-адрес имел больше уровней, таких как example.com/something/somethingelse/assets ? - person Tom Jenkinson; 18.09.2014
comment
Если в каталоге приложения есть каталог с активами, но он называется по-другому, и вы по-прежнему хотите обращаться к нему с тем же URL-адресом, вам нужно будет использовать alias вместо этого. Это позволит вам заменить сегменты URL. Если каталог активов содержится в другом каталоге, вам просто нужно настроить свой корень в местоположении, например, root /var/www/site/app/something/something;, чтобы путь, который соответствует регулярному выражению местоположения в сочетании с корнем, соответствовал имени файла. - person saaj; 19.09.2014