2016-12-09 4 views
1

Zunächst möchte ich feststellen, dass ich relativ neu zu nginx bin, ich weiß im Grunde nur, was ich in der letzten Woche gelernt habe.Nginx dynamische Standortpfadkonfiguration

Das heißt, ich habe derzeit ein Nginx-Server mit einer Standardkonfiguration:

server { 
    listen 80; 
    server_name site.com; 

    root /var/www/site.com/; 
    index index.php; 

    location/{ 
    try_files $uri $uri/ /index.php; 
    } 

    location /microsite/first { 
    try_files $uri $uri/ /microsite/first/; 
    } 

    location /microsite/second { 
    try_files $uri $uri/ /microsite/second/; 
    } 

    ... 
} 

Dies funktioniert gut, obwohl für jeden Micro ich zu den bestehenden hinzufügen, erfordert es, dass ein neuer Standort sein hinzugefügt unter Bezugnahme auf den Pfad der neuen Microsite.

Meine Frage ist: ist es möglich, die location Parameter in einer Art und Weise dynamisch eingestellt werden, dass es fängt und Referenzen, was Unterverzeichnis innerhalb des Verzeichnisses Micro/ existiert?

z.B. etwas entlang der Linie der Rewrite-Regel rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last; (von der nginx Website genommen), aber die auf die location Parameter, wie:

location ~ ^/microsite/(.*)$ { 
    try_files $uri $uri/ /microsite/$1/; 
} 

In dem die $1 die Unterverzeichnisnamen in (.*) weitergegeben fangen würde? (Ich habe versucht, diese Schnipsel, die ich (ein weiteres auf die Antwort gebaut beziehe) Nginx dynamic location configuration Frage, obwohl es nicht funktioniert) Ich bin kein Experte Regex

Auch ich es ein bisschen gezwickt haben in die Vergangenheit, aber es war vor einer Weile und ich erinnere mich nicht an die genaue Terminologie, so dass das vielleicht ein Teil des Problems sein könnte ?!

Wie auch immer, alle Hilfe wird geschätzt.
Vielen Dank im Voraus!

Antwort

1

Sie wahrscheinlich um die Aufnahme zu den ersten beiden Pfadsegmente begrenzen müssen:

location ~ ^(/microsite/[^/]+) { 
    try_files $uri $uri/ $1/; 
} 

Die [^/] Zeichenklasse alles übereinstimmt, die kein / ist

+0

Vielen Dank für Ihren Vorschlag, aber es hat nicht funktioniert. Ich habe versucht den 'location' Block genau wie du es geschrieben hast, aber beim Versuch, auf die Seite zuzugreifen, öffnet er einfach das 'save file'-Fenster (das Herunterladen der * index.php * Datei, die wir natürlich nicht wollen). – mformigo

+0

Es muss nach Ihrem 'location ~ \ .php $' Block platziert werden. In [dieses Dokument] (http://nginx.org/en/docs/http/request_processing.html) finden Sie Informationen dazu, wie 'nginx' eine Anfrage verarbeitet. Vielleicht möchten Sie das letzte Element explizit mit 'index.php' verknüpfen, indem Sie' $ 1/index.php' verwenden. –

+0

Hey Richard, Entschuldigung für die Abwesenheit, aber ich habe mich in ein anderes Projekt verwickelt und bin gerade auf dieses Problem zurückgekommen.und ich möchte Ihnen nur für Ihre ausgezeichnete Hilfe danken =) Ihr Vorschlag hat den Trick gemacht. obwohl für das, was ich aus der _nginx_ Dokumentation in Bezug auf "Standort" Blöcke priorisierung verstanden habe, obwohl der Pfad desto präziser als der "Standort" konfiguriert war, desto höher ist seine Priorität als Server-Regel !! obwohl dieser Block hat den '~' Charakter vor, so .. wie auch immer, ich habe es nach dem 'location ~ \ .php $' Block, wie Sie erwähnt, und es hat gut funktioniert, also danke nochmal = D Prost !! – mformigo

0

Probieren Sie etwas entlang der Linien von:

location ~ ^/microsite/(?<foo>.+)$ { 
    try_files $uri $uri/; 
    root /microsite/$foo; 
} 
+0

Vielen Dank auch für Ihr Feedback, obwohl es leider auch nicht funktioniert .. der 'location' Block, den Sie geteilt haben, hat eine ** 500 Intern zurückgegeben Serverfehler**. Ich spielte ein bisschen mit dem Code, um zu sehen, ob ich es zum Laufen bringen konnte, und fand heraus, dass der 500 durch die Zeile "root/path/$ foo" verursacht wurde. Ich habe auch versucht, die '$ foo' Variable auf die' try_files $ uri $ uri// Pfad/$ foo' (mit der 'root ...' Zeile auskommentiert) und es öffnet nur die 'Datei speichern 'Fenster. – mformigo