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.

Відповіді:


28

У конфігурації є звичайна проблема, яка зазвичай відбувається з 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-адреси.


Переписування тут взагалі не потрібне, коли aliasвикористовується директива, як вона повинна бути використана тут.
Tero Kilkanen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.