Налаштуйте nginx з декількома місцями з різними кореневими папками в піддомені


202

Я хочу подати кореневий URL піддомену та каталог піддомену двом різним папкам на своєму сервері. Ось проста настройка, яка у мене є і не працює ...

server {

    index index.html index.htm;
    server_name test.example.com;

    location / {
            root /web/test.example.com/www;
    }

    location /static {
            root /web/test.example.com/static;
    }
}

У цьому прикладі збирається test.example.com/внести індексний файл/web/test.example.com/www

і збирається test.example.com/staticпринести індексний файл/web/test.example.com/static

Відповіді:


238

Вам потрібно використовувати aliasдирективу для location /static:

server {

  index index.html;
  server_name test.example.com;

  root /web/test.example.com/www;

  location /static/ {
    alias /web/test.example.com/static/;
  }

}

Nginx вікі пояснює різницю між коренем і псевдонімом краще , ніж я можу:

Зауважте, що на перший погляд це може виглядати подібним до кореневої директиви, але корінь документа не змінюється, лише шлях до файлової системи, який використовується для запиту. Частина запиту про місце розташування запитується у випуску Nginx.

Зауважте, що rootі aliasповодьтеся з косою косою рисою по-різному.


67
Йому не потрібно alias. Прочитайте офіційні документи , а не вікі спільноти, заповнені користувачами. Цитата: Коли розташування відповідає останній частині значення директиви, краще використовувати кореневу директиву .
VBart

9
Це працювало для мене, за винятком того, що на ньому відсутня косою косою рисою. Псевдонім повинен читати: alias /web/test.example.com/static/;
ajma

8
@VBart документи говорять саме те, що ви цитуєте їх, але вони зовсім не виправдовують цю інструкцію - це здається довільним вибором стилю. Ви бачите якусь логічну причину за цим?
Марк Амері

104

Система директив про місцезнаходження є

Як і ви хочете переслати весь запит, який починається, /staticі ваші дані, присутні в/var/www/static

Тож простий метод відокремлює останню папку від повного шляху, це означає

Повний шлях: /var/www/static

Останній шлях: /static та перший шлях:/var/www

location <lastPath> {
    root <FirstPath>;
}

Тож давайте подивимось, що ви зробили помилку та які ваші рішення

Ваша помилка:

location /static {
    root /web/test.example.com/static;
}

Ваші рішення:

location /static {
    root /web/test.example.com;
}

2
Це мені допомогло: я зрозумів, що мені потрібно перейменувати свою папку або створити симпосилання для того, щоб все працювало.
cjm

3
велике дякую, мені не вдалося саме так :)
bobmoff

10
Це виглядає як досить СЕВЕРЕ обмеження свободи робити те, що я хочу. Я хочу, щоб URI, починаючи з певного шляху, подавались з каталогу, який не містить цей шлях URI у своєму фізичному шляху до файлу. За допомогою цього рішення я змушений помістити свої документи на диск під контуром, який закінчується символом "/ статичний". Мені це зовсім не подобається. Я хочу абсолютної і повної свободи розміщення файлів, куди я хочу.
Szczepan Hołyszewski

48
server {

    index index.html index.htm;
    server_name test.example.com;

    location / {
        root /web/test.example.com/www;
    }

    location /static {
        root /web/test.example.com;
    }
}

http://nginx.org/r/root


2
чим відрізняється запитаний?
TangMonk

5
@Wooden різниця: root /web/test.example.com;замість root /web/test.example.com/static;. nginx відображає шлях, визначений місцеположенням до дерева каталогів, і оскільки шлях і каталог джерел мають однакове ім'я, він працює з root.
rmoestl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.