Nginx-Reverse-Proxy und eine URL-Umschreibung

Nginx-Reverse-Proxy und eine URL-Umschreibung

Ich möchte die URL in einem Reverse-Proxy umschreiben, sodass das erste Segment entfernt wird, alle folgenden Segmente jedoch intakt bleiben. Dies muss geschehen, bevor es den Proxy-Pass erreicht.

Beispiel:

/admin/auth/local ----> (REWRITES TO) /auth/local
/admin/auth/register -------> (REWRITES TO) /auth/register

Mein Standortblock:

  location /admin {
        #add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
        add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
        proxy_set_header Host $host;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass_header Set-Cookie;
        proxy_read_timeout                 30;
        proxy_buffers 64 8k;
        rewrite /admin / break;
        proxy_pass http://127.0.0.1:9000;

Ich habe Folgendes ohne Erfolg versucht:

rewrite /admin / break;

Antwort1

Es gibt hier zwei Teile. Der erste befasst sich damit, wie nginx eingehende Anfragen weiterleitet proxy_pass.

Dort kann man eingehende Anfragen /mit /admin/Präfix an das Backend mit der folgenden Konfiguration weiterleiten:

location / {
    proxy_pass http://127.0.0.1:9000/admin/;
}

rewriteEs bedarf keiner Stellungnahme.

Der zweite Teil sind die URLs, die von der Anwendung generiert werden, die unter ausgeführt wird 127.0.0.1:9000. Sie müssen diese Anwendung so konfigurieren, dass URLs ohne /adminPräfix generiert werden, um URLs zu erhalten, die dem Nginx-Routing-Setup entsprechen.

Nginx kann diese Änderung am vom Backend generierten Inhalt nicht zuverlässig durchführen.

Antwort2

Ich glaube, Sie müssen nur Ihr erstes Segment (Admin) zum Proxy-Pass hinzufügen.

proxy_pass http://www.example.com/admin/;

Antwort3

Sie können den folgenden Codeausschnitt ausprobieren. Funktioniert bei mir.

location ~* /admin/(.*) {
  ...
  rewrite .* /$1 break;
  proxy_pass http://127.0.0.1:9000;
}

(.*)aus der ersten Zeile wird im Block als abgerufen $1. Die Idee besteht darin, die URI nach abzurufen admin/und alles durch diese URI zu ersetzen.

verwandte Informationen