Nginx mehrere Wurzeln


13

Ich möchte Anforderungen an ein bestimmtes Unterverzeichnis an einen anderen Stammspeicherort umleiten. Wie? Mein bestehender Block ist:

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

Das heißt, http://www.domain.com sollte /home/me/Documents/site1/index.html dienen, während http://www.domain.com/petproject / home / me / pet-Project / website dienen sollte /index.html - Nginx führt anscheinend alle Regeln nach dem Ersetzen erneut aus, und http://www.domain.com/petproject dient nur /home/me/Documents/site1/index.html.

Antworten:


27

Die Konfiguration hat das übliche Problem, das normalerweise bei Nginx auftritt. Das heißt, mit rootDirektive innerhalb des locationBlocks.

Versuchen Sie, diese Konfiguration anstelle Ihrer aktuellen locationBlöcke zu verwenden:

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

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

Dies bedeutet, dass das Standardverzeichnis für Ihre Website lautet /home/me/Documents/site1und für /petprojectURI der Inhalt aus dem /home/me/pet-Project/websiteVerzeichnis bereitgestellt wird .


4

Sie müssen das breakFlag zur Umschreiberegel hinzufügen, damit die Verarbeitung gestoppt wird. Da sich diese in einem Standortblock befindet, wird die Verarbeitung in diesem Block fortgesetzt:

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

Hinweis: Ich habe auch /?das passende Muster hinzugefügt , damit Sie am Anfang der URL keine doppelten Schrägstriche erhalten.


Das Umschreiben wird hier überhaupt nicht benötigt, wenn die aliasDirektive so verwendet wird, wie sie hier verwendet werden sollte.
— Tero Kilkanen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.