So verhindern Sie, dass Nginx Proxy-spezifische Unterverzeichnisse umkehrt

11

Unter Apache können Sie alles außer einem oder mehreren Unterverzeichnissen (mit "!") ProxyPass.

    ProxyPass /subdir !
    ProxyPass / http://localhost:9999/

Was ist das Nginx-Äquivalent?

Meine erste Vermutung funktioniert offensichtlich nicht:

 location /subdir {
      root /var/www/site/subdir;
  }

 location / {
      proxy_pass http://localhost:9999/ ;
  }
Falken
quelle

Antworten:

11

Sie können den proxy_pass genau so an den gewünschten Pfad binden

location = / {
    proxy_pass http://localhost:9999/;
}

Dies stellt sicher, dass aber kein anderer Pfad übergeben wird /

ODER

Sie können diese Syntax nur für die übereinstimmenden Unterverzeichnisse verwenden

location ^~ /subdir {
     alias /var/www/site/subdir;
}

location / {
    proxy_pass http://localhost:9999/ ;
}

Das ^~stimmt mit dem Unterverzeichnis überein und beendet dann die Suche, sodass das /nicht ausgeführt wird. Es wird hier beschrieben .

Christopher Perrin
quelle
root / var / www / site / subdir sollte in meinem Fall root / var / www / site sein, andernfalls versucht nginx, auf / var / www / site / subdir / subdir zuzugreifen.
Tinus
Du hast recht. Entweder das, oder Sie können aliasanstelle vonroot
Christopher Perrin
1
Könnten Sie das ^~näher erläutern ? Ich konnte nicht bekommen, was es tut. Ich habe versucht, den von Ihnen gesendeten Link zu lesen, kann ihn aber immer noch nicht erhalten. Wenn die am längsten übereinstimmende Präfixposition den Modifikator "^ ~" hat, werden reguläre Ausdrücke nicht überprüft.
Mohammed Noureldin
@MohammedNoureldin bedeutet im Wesentlichen, dass versucht wird, ein Präfix auf einem Pfad abzugleichen, und reguläre Ausdrücke nicht ausgewertet werden.
Christopher Perrin
1
@MohammedNoureldin Dies ist der erste Teil des Pfads, den Sie für den Standort verwenden möchten. Und ja, es ist ohne Regex.
Christopher Perrin