Nginx múltiples raíces

13

Me gustaría desviar las solicitudes a un subdirectorio particular, a otra ubicación raíz. ¿Cómo? Mi bloque existente es:

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

Es decir, http://www.domain.com debería servir /home/me/Documents/site1/index.html mientras que http://www.domain.com/petproject debería servir / home / me / pet-Project / website /index.html: parece que nginx vuelve a ejecutar todas las reglas después del reemplazo, y http://www.domain.com/petproject solo sirve /home/me/Documents/site1/index.html.

Michael restaura a Monica Cellio
fuente

Respuestas:

27

La configuración tiene el problema habitual que generalmente ocurre con nginx. Es decir, usando la rootdirectiva dentro del locationbloque.

Intente usar esta configuración en lugar de sus locationbloques actuales :

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

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

Esto significa que el directorio predeterminado para su sitio web es /home/me/Documents/site1, y para /petprojectURI, el contenido se sirve desde el /home/me/pet-Project/websitedirectorio.

Tero Kilkanen
fuente
4

Necesita breakque se agregue el indicador a la regla de reescritura, de modo que el procesamiento se detenga, y como esto está dentro de un bloque de ubicación, el procesamiento continuará dentro de ese bloque:

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

Tenga en cuenta que también agregué /?el patrón de coincidencia para que no termine con barras diagonales dobles al comienzo de la url.

wurtel
fuente
La reescritura no es necesaria aquí cuando aliasse usa la directiva como debería usarse aquí.
Tero Kilkanen