Обединете съдържанието на 2 директории с nginx

аз имам

  • /site/app/assets/css
  • /site/app/assets/js
  • /site/public/assets/img
  • /site/public/assets/whatever

Уеб коренът трябва да е /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