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

Настройте 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

Ответ 1

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

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

Обратите внимание, что root и alias обрабатывают завершающие косые черты по-разному.

Ответ 2

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

Как вы хотите переслать весь запрос, который запускает /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;
}

Ответ 3

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