Côté serveur Blazor derrière le proxy inverse 404

10

J'ai une application côté serveur blazor hébergée sur IIS derrière un proxy inverse (en utilisant ARR).

J'ai essayé tout ce à quoi je peux penser, mais je continue de monter 404

_framework / blazor.server.js

Mon href de base est défini sur "/ subsite /":

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

et toutes mes valeurs src sont relatives comme ceci:

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

Chaque autre référence de script se charge correctement, MÊME les données _content, mais pas le blazor.server.js.

J'ai également essayé l'ancienne astuce PathBase pour les applications MVC:

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

Quelqu'un peut-il me dire comment faire en sorte que Blazor sache où placer blazor.server.js dans un scénario de proxy inverse?

Dynde
la source
1
blazor.server.js est une ressource intégrée. vous pouvez essayer d'obtenir une copie du fichier et de le servir statiquement comme n'importe quel autre fichier js. Mais même alors, il y a beaucoup de bavardages entre le serveur et le navigateur. Je ne sais pas comment cela va fonctionner dans votre configuration.
ravi
Hmm. Je ne comprends pas vraiment cela, car les composants sont également des ressources intégrées, vivant dans _content, mais il les trouve très bien. Je vais essayer de le saisir et de le servir statiquement, mais cela semble être un bug réel - je veux dire, comment pouvez-vous oublier de prendre en charge les sous-sites de proxy inverse en 2019
Dynde
Avez-vous une journalisation disponible pour voir quel (et si) chemin de demande se retrouve avec ASP.NET?
Henk Holterman

Réponses:

-1

De documents .

Réécrire les URL pour un routage correct

Les demandes de routage pour les composants de page dans une application Blazor WebAssembly ne sont pas aussi simples que les demandes de routage dans une application hébergée Blazor Server. Envisagez une application Blazor WebAssembly avec deux composants:

  • Main.razor - Charge à la racine de l'application et contient un lien vers leAbout composant ( href="About").
  • About.razor -About composant.

Lorsque le document par défaut de l'application est demandé à l'aide de la barre d'adresse du navigateur (par exemple, https://www.contoso.com/ ):

  • Le navigateur fait une demande.
  • La page par défaut est renvoyée, qui est généralement index.html .
  • index.html démarre l'application.
  • Le routeur Blazor se charge et le Maincomposant Razor est rendu.

Dans la page principale, la sélection du lien vers le composant À propos fonctionne sur le client car le routeur Blazor empêche le navigateur de faire une demande sur Internet www.contoso.compour Aboutet sert le Aboutcomposant rendu lui-même. Toutes les demandes de points de terminaison internes dans l' application Blazor WebAssembly fonctionnent de la même manière: les demandes ne déclenchent pas de demandes basées sur un navigateur vers des ressources hébergées par le serveur sur Internet. Le routeur gère les demandes en interne.

Si une demande est effectuée à l'aide de la barre d'adresse du navigateur pour www.contoso.com/About, la demande échoue. Aucune ressource de ce type n'existe sur l'hôte Internet de l'application, donc un 404 - Introuvable réponse est renvoyée.

Étant donné que les navigateurs adressent des requêtes aux hôtes Internet pour les pages côté client, les serveurs Web et les services d'hébergement doivent réécrire toutes les requêtes de ressources qui ne se trouvent pas physiquement sur le serveur dans la page index.html . Lorsque index.html est renvoyé, le routeur Blazor de l'application prend le relais et répond avec la bonne ressource.

Lors du déploiement sur un serveur IIS, vous pouvez utiliser le module de réécriture d'URL avec le fichier web.config publié de l'application . Pour plus d'informations, consultez la section IIS .


Vous pouvez peut-être essayer d'activer le proxy direct dans le gestionnaire IIS-> nœud de serveur-> cache de routage de demande d'application-> proxy-> activer.

Si vous n'avez qu'un seul site Web, vous pouvez simplement ajouter le site Web à la batterie de serveurs ARR, puis il créera automatiquement la règle de routage. Il sera pratique de surveiller le serveur principal avec un bilan de santé.

Cet avertissement ARR est-il à l'origine de mon 404?

Hamza Rashid
la source
Pour autant que je sache, cet article tourne autour de Blazor WebAssembly, et j'utilise côté serveur. De plus, mon IIS utilise déjà la fonction de proxy direct d'ARR (car c'est ainsi que je fais du proxy inverse dans ma configuration).
Dynde