nginx: parametrisiertes proxy_pass

andy_m4

Admiral
Registriert
Aug. 2015
Beiträge
8.365
Hab ein nginx-Webserver am laufen und der funktioniert soweit auch.

NGINX:
http {
    server {
        listen      80;
        server_name proxy.lan;
        location / {
            proxy_pass ?WHAT?;
        }
}
Mein Ziel ist, das man dem Webserver die URL
http://proxy.lan/http://www.test.de?urlparam1=val1
geben kann und nginx übergibt an proxy_pass: http://www.test.de?urlparam1=val1

Theoretisch kann man man ja die Variable $request_uri benutzen. Allerdings hat man da ja dann auch das führende / mit drin, was man irgendwie entfernen muss. Und da stehe ich gerade etwas auf dem Schlauch, wie man das am besten macht.
Evtl. mit einer rewrite-Rule?

Über Ideen/Anregungen würde ich mich sehr freuen.
 
Moin,
kannst du bitte einmal mit einfacheren Worten beschreiben, was du überhaupt tun möchtest?

Das klingt für mich, als würdest du nach einem regulären HTTP Proxy (also FORWARDING), nicht nach einem HTTP reverse proxy (das, was wir hier via NGINX proxy_pass sehen) haben wollen?!

Ja, kann man iiirgendwie auch wie oben im Link beschrieben erreichen: Dafür ist der nginx aber nicht wirklich gemacht, und das ist keine Straße an dessen Ende dich Glückseligkeit erwarten wird!
 
DoubleJ2k schrieb:
Das geht schon sehr stark in die Richtung. Danke für den Hinweis!

ksk23 schrieb:
kannst du bitte einmal mit einfacheren Worten beschreiben, was du überhaupt tun möchtest?
Naja. EInfacher als "QuellURL-->ZielURL" geht ja kaum noch darzustellen.
Was fehlt Dir konkret?

ksk23 schrieb:
Dafür ist der nginx aber nicht wirklich gemacht,
Kann man drüber streiten.
Aber ja. Es ist jetzt kein Proxy im Sinne eines Squids aber für meine Zwecke ist es das, was haben will.

ksk23 schrieb:
und das ist keine Straße an dessen Ende dich Glückseligkeit erwarten wird!
Ehrlich gesagt hatte auch keine Anleitung zum Glücklichsein erwartet, sondern nur eine Möglichkeit eine URL umzuschreiben. :-)
 
Aus der Hüfte geschossen:
Da wirst du mit rewrite arbeiten müssen oder in dem Fall, weil du eine bestimmte Struktur für die Zieladresse voraussetzt, damit das proxy_pass danach funktionieren kann, auch direkt eine regex-Location. Letzteres mit einer named capture group kombinieren, dann kannst du die direkt im proxy_pass benutzen und brauchst nicht noch ein zusätzliches rewrite.

Zusätzlich, weil du den Hostnamen zwangsweise als Variable dem proxy_pass übergibst, musst du via resolver-Direktive einen Nameserver konfigurieren.

Vielleicht gibt es für solche Spielereien auch fertige Module für den nginx... oder vielleicht auch nen anderen Webserver, der für sowas ausgelegt ist.
Ergänzung ()

Für sowas sind Sprachmodelle übrigens echt sinnvoll zu gebrauchen. Mindestens bekommt man einen Ansatzpunkt, um weiter zu machen. In dem Fall lag ich sogar ziemlich gut... vielleicht sollte ich mich auch als LLM verdingen 🤣
https://www.perplexity.ai/search/i-need-a-nginx-config-which-pa-Gs6dRx3bTuiIB1qcQoHHcw
Ergänzung ()

Naja, die proxy_set_header würde ich weglassen. Das verrät dich an der Stelle nur. Aber du guckst dir das ja eh detailiert an und verstehst, was da passiert, bevor du das produktiv einsetzt ;)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: andy_m4
KillerCow schrieb:
musst du via resolver-Direktive einen Nameserver konfigurieren.
Gut zu wissen.

KillerCow schrieb:
Für sowas sind Sprachmodelle übrigens echt sinnvoll zu gebrauchen.
btw. www.perplexity.ai kannte ich noch gar nicht.

KillerCow schrieb:
vielleicht sollte ich mich auch als LLM verdingen 🤣
Unbedingt! :-)
Auf der anderen Seite: Die Sprachmodelle sind bestimmt auch sehr oft mit Sch**ßfragen konfrontiert. Teilweise ist es ja schon mehr als grenzwertig wie Menschen mit anderen Menschen umgehen. Wenn solche Typen dann wissen, das auf der anderen Seite gar kein Mensch ist sondern eine Maschine, dann kennen sie vermutlich gar keine Hemmungen mehr.
Mal sehen, wann die ersten LLM-Streiks kommen wegen "bessere Arbeitsbedingungen" und so. :-)

KillerCow schrieb:
Aber du guckst dir das ja eh detailiert an und verstehst, was da passiert, bevor du das produktiv einsetzt ;)
Na klar. Wir sind ja hier schließlich nicht bei Microsoft. :-)
 
andy_m4 schrieb:
btw. www.perplexity.ai kannte ich noch gar nicht.
Bin ich auch irgendwann mal drüber gestolpert und war recht angetan davon, dass man da zu den servierten Infos direkt Links zu den Quellen bekommt. Keine Ahnung, wie das mittlerweile bei "den anderen" aussieht.
andy_m4 schrieb:
Ja, nginx ist unerwartet speziell, was die Namensauflösung angeht. Beim Starten respektive Neuladen der Config werden alle gefundenen statischen Hostnamen über den Resolver des Hosts aufgelöst. Im Betrieb werden die verwendeten Hostnamen aber nur dann dynamisch aufgelöst, wenn man via "resolver" einen DNS-Server angibt. Das betrifft alle Hostnamen, die z.B. in einem proxy_pass via Variable gesetzt werden oder das re-resolving von Hostnamen in Upstreams.
 
KillerCow schrieb:
Beim Starten respektive Neuladen der Config werden alle gefundenen statischen Hostnamen über den Resolver des Hosts aufgelöst. Im Betrieb werden die verwendeten Hostnamen aber nur dann dynamisch aufgelöst, wenn man via "resolver" einen DNS-Server angibt.
Danke für diesen Hinweis. Das gibt mir ein besseres Verständnis darüber.

KillerCow schrieb:
direkt Links zu den Quellen bekommt.
Ja. Den Aspekt finde ich auch ganz interessant, damit man nachprüfen kann, ob die Infos nicht herbeihalluziniert worden sind.
 
Zurück
Oben