Настройте nginx с несколькими местоположениями с разными корневыми папками на субдомене

Я ищу, чтобы служить корневым 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

4b9b3361

Вам нужно использовать директиву 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 wiki объясняет разницу между корнем и псевдонимом лучше, чем я могу:

Обратите внимание, что он может выглядеть аналогично корневой директиве с первого взгляда, но корень документа не изменяется, просто путь файловой системы, используемый для запроса. Часть запроса запроса отбрасывается в запросах Nginx.

147
ответ дан 20 июля '12 в 9:22
источник

Система определения местоположения

Как вы хотите переслать весь запрос, который запускает /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;
}
54
ответ дан 04 мая '15 в 22:36
источник