Lado del servidor Blazor detrás del proxy inverso 404

10

Tengo una aplicación blazor del lado del servidor alojada en IIS detrás de un proxy inverso (usando ARR).

He intentado todo lo que puedo pensar, pero sigo teniendo 404 en

_framework / blazor.server.js

Mi base href está configurada en "/ subsite /":

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

y todos mis valores src son relativos así:

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

Cualquier otra referencia de script se carga bien, INCLUSO los datos de contenido, pero no los blazor.server.js.

También probé el viejo truco de PathBase para aplicaciones MVC sin éxito:

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

¿Alguien puede decirme cómo hacer que Blazor se dé cuenta de dónde colocar blazor.server.js en un escenario de proxy inverso?

Dynde
fuente
1
blazor.server.js es un recurso incrustado. puede intentar obtener una copia del archivo y servirlo estáticamente como cualquier otro archivo js. Pero incluso entonces hay mucha señal-r parloteo entre el servidor y el navegador. No estoy seguro de cómo va a funcionar en su configuración.
ravi
Hmm Realmente no entiendo eso, porque los componentes también son recursos integrados, que viven en _contenido, pero los encuentra muy bien. Intentaré agarrarlo y servirlo de forma estática, pero esto parece un error real. Quiero decir, ¿cómo puede olvidarse de admitir subsitios de proxy inverso en 2019
Dynde
¿Tiene algún registro disponible para ver qué ruta de solicitud (y si) termina con ASP.NET?
Henk Holterman

Respuestas:

-1

De los documentos .

Reescribir URL para un enrutamiento correcto

Las solicitudes de enrutamiento para componentes de página en una aplicación Blazor WebAssembly no son tan sencillas como las solicitudes de enrutamiento en una aplicación alojada de Blazor Server. Considere una aplicación Blazor WebAssembly con dos componentes:

  • Main.razor : se carga en la raíz de la aplicación y contiene un enlace al Aboutcomponente ( href="About").
  • About.razor - Aboutcomponente.

Cuando se solicita el documento predeterminado de la aplicación utilizando la barra de direcciones del navegador (por ejemplo https://www.contoso.com/):

  • El navegador hace una solicitud.
  • Se devuelve la página predeterminada, que generalmente es index.html .
  • index.html inicia la aplicación.
  • El enrutador de Blazor se carga y Mainse procesa el componente Razor .

En la página Principal, seleccionar el enlace al componente Acerca de funciona en el cliente porque el enrutador Blazor impide que el navegador realice una solicitud en Internet www.contoso.compara Abouty sirve el Aboutcomponente renderizado . Todas las solicitudes de puntos finales internos dentro de la aplicación Blazor WebAssembly funcionan de la misma manera: las solicitudes no activan solicitudes basadas en navegador a recursos alojados en el servidor en Internet. El enrutador maneja las solicitudes internamente.

Si se realiza una solicitud utilizando la barra de direcciones del navegador www.contoso.com/About, la solicitud falla. No existe tal recurso en el host de Internet de la aplicación, por lo que se devuelve una respuesta 404 - No encontrado .

Debido a que los navegadores realizan solicitudes a los hosts basados ​​en Internet para páginas del lado del cliente, los servidores web y los servicios de alojamiento deben reescribir todas las solicitudes de recursos que no están físicamente en el servidor en la página index.html . Cuando se devuelve index.html , el enrutador Blazor de la aplicación se hace cargo y responde con el recurso correcto.

Al implementar en un servidor IIS, puede usar el Módulo de reescritura de URL con el archivo web.config publicado de la aplicación . Para obtener más información, consulte la sección IIS .


Tal vez podría intentar habilitar el proxy de reenvío en el administrador IIS-> nodo del servidor-> caché de enrutamiento de solicitud de aplicación-> proxy-> habilitar.

Si solo tiene un sitio web, simplemente puede agregar el sitio web a la granja de servidores ARR y luego creará la regla de enrutamiento automáticamente. Será conveniente monitorear el servidor de fondo con un control de estado.

¿Esta advertencia ARR está causando mi 404?

Hamza Rashid
fuente
Bueno, por lo que puedo ver, ese artículo gira en torno a Blazor WebAssembly, y estoy usando el lado del servidor. Además, mi IIS ya está utilizando la función de proxy hacia adelante de ARR (ya que así es como estoy haciendo proxy inverso en mi configuración).
Dynde