Blazor-Serverseite hinter Reverse-Proxy 404

10

Ich habe eine Blazor-Server-seitige App, die auf IIS hinter einem Reverse-Proxy (mit ARR) gehostet wird.

Ich habe alles versucht, was mir einfällt, aber ich mache immer weiter mit 404

_framework / blazor.server.js

Meine Basis href ist auf "/ subsite /" gesetzt:

<base href="https://stackoverflow.com/subsite/" />

und alle meine src-Werte sind relativ wie folgt:

<script src="_framework/blazor.server.js"></script>
<script src="_content/BlazorInputFile/inputfile.js"></script>
<script src="animations.js"></script>

Alle anderen Skriptreferenzen werden einwandfrei geladen, AUCH die _content-Daten, jedoch nicht die blazor.server.js.

Ich habe den alten PathBase-Trick auch für MVC-Apps ohne Erfolg ausprobiert:

if (!env.IsDevelopment()) {
    app.Use((context, next) => {
        context.Request.PathBase = new PathString("/subsite");
        return next();
    });
}

Kann mir jemand sagen, wie Blazor erkennen kann, wo die Datei blazor.server.js in einem Reverse-Proxy-Szenario abgelegt werden soll?

Dynde
quelle
1
blazor.server.js ist eine eingebettete Ressource. Sie können versuchen, eine Kopie der Datei zu erhalten und sie wie jede andere JS-Datei statisch bereitzustellen. Aber selbst dann gibt es viel Signal-R-Chatter zwischen dem Server und dem Browser. Ich bin mir nicht sicher, wie es in Ihrem Setup funktionieren wird.
Ravi
Hmm. Ich verstehe das nicht wirklich, weil die Komponenten auch eingebettete Ressourcen sind, die in _content leben, aber es findet sie in Ordnung. Ich werde versuchen, es zu greifen und statisch bereitzustellen, aber dies scheint ein tatsächlicher Fehler zu sein - ich meine, wie können Sie vergessen, Reverse-Proxy-Unterwebsites im Jahr 2019 zu unterstützen
Dynde
Haben Sie eine Protokollierung zur Verfügung, um festzustellen, welcher (und ob) Anforderungspfad bei ASP.NET endet?
Henk Holterman

Antworten:

-1

Aus Dokumenten .

Schreiben Sie URLs für ein korrektes Routing neu

Das Weiterleiten von Anforderungen für Seitenkomponenten in einer Blazor WebAssembly-App ist nicht so einfach wie das Weiterleiten von Anforderungen in einer von Blazor Server gehosteten App. Stellen Sie sich eine Blazor WebAssembly-App mit zwei Komponenten vor:

  • Main.razor - Wird im Stammverzeichnis der App geladen und enthält einen Link zur AboutKomponente ( href="About").
  • About.razor - AboutKomponente.

Wenn das Standarddokument der App über die Adressleiste des Browsers angefordert wird (z. B. https://www.contoso.com/):

  • Der Browser stellt eine Anfrage.
  • Die Standardseite wird zurückgegeben, normalerweise index.html .
  • index.html bootet die App.
  • Blazors Router wird geladen und die Razor- MainKomponente wird gerendert.

In der Hauptseite, auf der Client die Verbindung zu dem über Komponente funktioniert die Auswahl , da die Blazor Router stoppt den Browser eine Anfrage über das Internet von zu machen www.contoso.comfür Aboutund dient dazu , die gerenderte AboutKomponente selbst. Alle Anforderungen für interne Endpunkte in der Blazor WebAssembly-App funktionieren auf dieselbe Weise: Anforderungen lösen keine browserbasierten Anforderungen an vom Server gehostete Ressourcen im Internet aus. Der Router verarbeitet die Anforderungen intern.

Wenn eine Anfrage über die Adressleiste des Browsers für gestellt wird www.contoso.com/About, schlägt die Anfrage fehl. Auf dem Internet-Host der App ist keine solche Ressource vorhanden, daher wird eine Antwort 404 - Nicht gefunden zurückgegeben.

Da Browser Anforderungen an clientseitige Seiten an internetbasierte Hosts stellen, müssen Webserver und Hostingdienste alle Anforderungen für Ressourcen, die sich nicht physisch auf dem Server befinden, auf die Seite index.html umschreiben . Wenn index.html zurückgegeben wird, übernimmt der Blazor-Router der App und antwortet mit der richtigen Ressource.

Bei der Bereitstellung auf einem IIS-Server können Sie das URL-Rewrite-Modul mit der veröffentlichten web.config- Datei der App verwenden. Weitere Informationen finden Sie im Abschnitt IIS .


Möglicherweise können Sie versuchen, den Forward-Proxy in IIS-Manager-> Serverknoten-> Routing-Cache für Anwendungsanforderungen-> Proxy-> Aktivieren zu aktivieren.

Wenn Sie nur eine Website haben, können Sie die Website einfach zur ARR-Serverfarm hinzufügen. Anschließend wird die Routing-Regel automatisch erstellt. Es ist praktisch, den Back-End-Server mit Integritätsprüfung zu überwachen.

Verursacht diese ARR-Warnung meinen 404?

Hamza Rashid
quelle
Soweit ich sehen kann, dreht sich dieser Artikel um Blazor WebAssembly, und ich verwende die Serverseite. Darüber hinaus verwendet mein IIS bereits die Forward-Proxy-Funktion von ARR (da ich in meinem Setup auf diese Weise Reverse-Proxy mache).
Dynde