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.

Michael restauriert Monica Cellio
quelle

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 .

Tero Kilkanen
quelle
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.

wurtel
quelle
Das Umschreiben wird hier überhaupt nicht benötigt, wenn die aliasDirektive so verwendet wird, wie sie hier verwendet werden sollte.
Tero Kilkanen