Raízes múltiplas Nginx

13

Gostaria de desviar os pedidos para um subdiretório específico, para outro local raiz. Quão? Meu bloco existente é:

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;
    } }

Ou seja, http://www.domain.com deve veicular /home/me/Documents/site1/index.html, enquanto http://www.domain.com/petproject deve veicular / home / me / pet-Project / website /index.html - parece que o nginx executa novamente todas as regras após a substituição, e http://www.domain.com/petproject serve apenas /home/me/Documents/site1/index.html.

Michael restaura Monica Cellio
fonte

Respostas:

27

A configuração tem o problema usual que geralmente acontece com o nginx. Ou seja, usando a rootdiretiva dentro do locationbloco.

Tente usar esta configuração em vez de seus locationblocos atuais :

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

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

Isso significa que o diretório padrão do seu site é /home/me/Documents/site1e, para o /petprojectURI, o conteúdo é veiculado no /home/me/pet-Project/websitediretório.

Tero Kilkanen
fonte
4

Você precisa do breaksinalizador adicionado à regra de reescrita, para que o processamento seja interrompido e, como isso ocorre dentro de um bloco de localização, o processamento continuará dentro desse bloco:

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

Observe também que eu adicionei /?o padrão de correspondência para que você não acabe com barras duplas no início do URL.

Wurtel
fonte
A reescrita não é necessária aqui quando a aliasdiretiva é usada, como deveria ser usada aqui.
Tero Kilkanen