nginx: Wie füge ich der Proxy_pass-Direktive einen URI-Pfad zum Host hinzu?

nginx: Wie füge ich der Proxy_pass-Direktive einen URI-Pfad zum Host hinzu?

Problem:

  • Ich verwende eine Nginx- proxy_passDirektive, um httpsAnfragen mit einem bestimmten locationPfad in der URI umzuleiten, z. B. https://domain/path/index.htmlan http://container_ip:port/index.html.
  • Für die erste Anfrage funktioniert das problemlos.
  • Wenn in der HTML-Datei jedoch zu ladende Ressourcen angegeben sind, suchen Clients diese Ressourcen ohne Pfad und verwenden nur die Basis-URL (im Beispiel ) https://domain/main.css.

Frage:
Wie kann ich nginx so konfigurieren, dass solche Ressourcen auch am ursprünglichen Pfad gesucht werden, im Beispiel bei https://domain/path/main.css?

Aktuelle falsche Nginx-Konfiguration:

server {
    listen 443 ssl;
    server_name domain;

    [...]

    location /path/ {
        proxy_set_header Host $host;
        proxy_pass http://container_ip:port/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Antwort1

Pfade zu Ressourcen werden von Ihrer Anwendung generiert. Der richtige und zuverlässige Ansatz besteht darin, Ihre Anwendung so zu reparieren, dass Ressourcen-URLs mit korrekten Pfaden generiert werden.

Wenn Sie eine unzuverlässige Lösung wünschen, können Sie versuchen,http://nginx.org/en/docs/http/ngx_http_sub_module.htmlum Ressourcen-URLs in Antworten zu ersetzen, die Nginx als Proxy verwendet. Es besteht jedoch die Möglichkeit unerwünschter Nebenwirkungen, die schwer zu diagnostizieren sein können.

verwandte Informationen