Nginx множественные корни

13

Я хотел бы перенаправить запросы в определенный подкаталог в другое корневое местоположение. Как? Мой существующий блок:

server {
    listen       80;
    server_name  www.domain.com;

    location / {
        root   /home/me/Documents/site1;
        index  index.html;
    }

    location /petproject {
        root   /home/me/pet-Project/website;
        index  index.html;
        rewrite ^/petproject(.*)$ /$1;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    } }

То есть http://www.domain.com должен обслуживать /home/me/Documents/site1/index.html, тогда как http://www.domain.com/petproject должен обслуживать / home / me / pet-Project / website /index.html - кажется, что nginx перезапускает все правила после замены, а http://www.domain.com/petproject просто обслуживает /home/me/Documents/site1/index.html.

Майкл восстановил Монику Челлио
источник

Ответы:

27

Конфигурация имеет обычную проблему, которая обычно происходит с nginx. То есть используя rootдирективу внутри locationблока.

Попробуйте использовать эту конфигурацию вместо ваших текущих locationблоков:

root /home/me/Documents/site1;
index index.html;

location /petproject {
    alias /home/me/pet-Project/website;
}

Это означает, что каталог по умолчанию для вашего веб-сайта /home/me/Documents/site1, а для /petprojectURI контент подается из /home/me/pet-Project/websiteкаталога.

Теро Килканен
источник
4

Вам необходимо breakдобавить флаг в правило перезаписи, чтобы обработка прекратилась, и, поскольку он находится внутри блока местоположения, обработка будет продолжаться внутри этого блока:

rewrite ^/petproject/?(.*)$ /$1 break;

Заметьте, что я также добавил /?в соответствующий шаблон, чтобы вы не заканчивали двойной косой чертой в начале URL.

wurtel
источник
Переписывание здесь вообще не нужно, если aliasиспользуется директива, как здесь.
Теро Килканен