Nginx Reverse-Proxy-Basis-URI zum Ändern des Ports

Nginx Reverse-Proxy-Basis-URI zum Ändern des Ports

Hallo, ich möchte einen Reverse-Proxy, mein Nginx-Basisport wird beispielsweise verwendet

http://example.com:443/ips/8443 -> http://example.com:8443/ips/8443
http://example.com:443/ips/23950 -> http://example.com:23950/ips/23950

Wenn es dies unterstützt, wäre es viel besser, aber es ist nicht zwingend

http://example.com:443/ips/23950/xyz -> http://example.com:23950/ips/23950/xyz

Und das ist meine Konfiguration

    location ~ /ips/([0-9]+)(/|)(\S+|)$ {
            proxy_pass http://127.0.0.1:$1/$3;
    }

Ich verstehe REGEX in nginx nicht richtig, aber ich kann sagen, ich habe mein Bestes versucht

Antwort1

Um dieses Problem zu beheben, müssen Sie die Direktive proxy_pass aktualisieren, um den vollständigen URL-Pfad in die Proxy-Anfrage aufzunehmen. Dies können Sie mithilfe der Variable $request_uri tun, die den vollständigen URL-Pfad der eingehenden Anfrage enthält.

Hier ist ein Beispiel, wie die aktualisierte Proxy_pass-Direktive aussehen könnte:

proxy_pass http://127.0.0.1:$1$request_uri;

Dadurch wird die Anfrage an den lokalen Port weitergeleitet, zusammen mit dem vollständigen URL-Pfad der eingehenden Anfrage. Eine Anfrage an /ips/23950/xyz wird also weitergeleitet anhttp://127.0.0.1:23950/xyz, wodurch die Anforderung vom lokalen Server korrekt verarbeitet werden kann.

Es ist auch erwähnenswert, dass der Standortblock, der die Proxy_Pass-Direktive enthält, der einzige Block innerhalb des Standortblocks /ips sein sollte. Dies liegt daran, dass die Standortblöcke der Reihe nach verarbeitet werden und die Anweisung „return 404“ im äußeren Standortblock verhindert, dass Anfragen verarbeitet werden, die mit dem inneren Standortblock übereinstimmen. Sie müssen daher die Anweisung „return 404“ in den Standortblock verschieben, der den URLs mit Portnummern entspricht, und sie so ändern, dass sie „return 403“ oder einen anderen Fehlercode zurückgibt, der angibt, dass die angeforderte URL nicht zulässig ist.

Hier ist ein Beispiel, wie die aktualisierte Konfiguration aussehen könnte:

location ~ ^/ips/([0-9]+) {
    proxy_redirect off;
    proxy_pass http://127.0.0.1:$1$request_uri;
    proxy_http_version 1.1;
   

verwandte Informationen