Leiten Sie HTTP- (oder TCP-)Anfragen über NGINX mithilfe der Subdomäne an einen bestimmten Port weiter

Leiten Sie HTTP- (oder TCP-)Anfragen über NGINX mithilfe der Subdomäne an einen bestimmten Port weiter

Ich möchte einen lokalen Webserver über einen Remote-Webserver verfügbar machen. Der Remote-Host verfügt bereits über Nginx und eine Webanwendung (Webmail). Der Remote-Server fungiert als Gateway für den lokalen Webserver, der den Port 80 an den Remote-Server 8080 weiterleitet. Das funktioniert.

Jetzt möchte ich die Anfragen der Subdomain (z. B. bridge.mydomain.co) an den weitergeleiteten Port weiterleiten. Ich habe Folgendes versucht:

server {
    listen 80;
    listen [::]:80;
    server_name bridge.mydomain.co;

    location / {
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Auf dem lokalen Webserver wird eine komplexe PHP-Anwendung ausgeführt, daher gibt es eine Fehlermeldung:

40 Fehler wie:

Das Laden des Stylesheets '' wurde abgelehnt, da es die folgende Content Security Policy-Richtlinie verletzt: „default-src https: data: ‚unsafe-inline‘ ‚unsafe-eval‘“. Beachten Sie, dass ‚style-src-elem‘ nicht explizit festgelegt wurde, sodass ‚default-src‘ als Fallback verwendet wird.

und 56 von:

Das Laden des Skripts '' wurde abgelehnt, da es gegen die folgende Content Security Policy-Richtlinie verstößt: „default-src https: data: ‚unsafe-inline‘ ‚unsafe-eval‘“. Beachten Sie, dass ‚script-src-elem‘ nicht explizit festgelegt wurde, sodass ‚default-src‘ als Fallback verwendet wird.

Ich weiß, dass ich den weitergeleiteten Port direkt freigeben könnte, das funktioniert einwandfrei. Aber ich möchte (irgendwann) nginx für die TLS-Terminierung und anschließende Weiterleitung verwenden.

Wenn man über dieses Problem liest, scheint es, als ob der lokale Webserver in PHP die Anfragen ablehnt. Ich weiß jedoch nicht, wie ich das beheben kann.

Irgendeine Hilfe?

Antwort1

Finde es am Ende heraus. Ich musste die folgenden Header übergeben/hinzufügen:

server {
    listen 80;
    listen [::]:80;
    server_name bridge.mydomain.co;

    proxy_pass_header server;

    location / {
        proxy_set_header Host $host;
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' http://bridge.mydomain.co http://bridge.mydomain.co:8080  http://bridge.mydomain.co/core/img/favicon-touch.png; img-src 'self' http://bridge.mydomain.co http://bridge.mydomain.co:8080;";
        proxy_pass http://bridge.mydomain.co:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

Ich glaube, die Port-Version wird nicht benötigt und es fehlen einige Header, die durch den „Standard“ abgedeckt sind. Es besteht also Raum für Verbesserungen.

Wenn Sie eine Erklärung lesen möchten, gibt es hier Material von Leuten, die mehr wissen als ich:https://stackoverflow.com/questions/33300111/wie-man-die-content-security-policy-of-site-a-während-der-verwendung-von-nginx-proxy-pass-o-override

verwandte Informationen