Nginx несколько корней

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

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.

10
задан 22 April 2015 в 14:09
2 ответа

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

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

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

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

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

24
ответ дан 2 December 2019 в 21:59

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

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

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

4
ответ дан 2 December 2019 в 21:59

Теги

Похожие вопросы