Integración de Azure SignalR con servidores proxy inversos
Se puede usar un servidor proxy inverso delante de Azure SignalR Service. Los servidores proxy inversos se encuentran entre los clientes, y el servicio Azure SignalR y otros servicios pueden ayudar en varios escenarios. Por ejemplo, los servidores proxy inversos pueden equilibrar la carga de solicitudes de cliente diferentes a diferentes servicios back-end, normalmente puede configurar reglas de enrutamiento diferentes para diferentes solicitudes de cliente y proporcionar una experiencia de usuario fluida para los usuarios que acceden a diferentes servicios back-end. También pueden proteger los servidores back-end frente a vulnerabilidades de seguridad comunes con control de protección centralizado. Los servicios como Azure Application Gateway, Azure API Management o Akamai pueden actuar como servidores proxy inversos.
Una arquitectura común mediante un servidor proxy inverso con Azure SignalR es la siguiente:
Importante
Las cadenas de conexión sin procesar solo aparecen en este artículo con fines de demostración.
Una cadena de conexión incluye la información de autorización necesaria para que la aplicación acceda al servicio Azure Web PubSub. La clave de acceso dentro de la cadena de conexión es similar a una contraseña raíz para el servicio. En entornos de producción, proteja siempre las claves de acceso. Use Azure Key Vault para administrar y rotar las claves de forma segura y proteger la cadena de conexión mediante el Microsoft Entra ID y autorizar el acceso con el identificador de Microsoft Entra.
Evite distribuirlas a otros usuarios, codificarlas de forma rígida o guardarlas en un archivo de texto sin formato al que puedan acceder otros usuarios. Rote sus claves si cree que se han puesto en peligro.
Procedimientos generales
Hay varias prácticas generales que se deben seguir al usar un proxy inverso delante de SignalR Service.
Las cadenas de conexión sin procesar solo aparecen en este artículo con fines de demostración. En entornos de producción, proteja siempre las claves de acceso. Use Azure Key Vault para administrar y rotar las claves de forma segura y proteger la cadena de conexión mediante el Microsoft Entra ID y autorizar el acceso con el identificador de Microsoft Entra.
Asegúrese de reescribir el encabezado HOST HTTP entrante con la dirección URL del servicio Azure SignalR, por ejemplo,
https://demo.service.signalr.net
. Azure SignalR es un servicio multiinquilino y se basa en el encabezadoHOST
para resolver el punto de conexión correcto. Por ejemplo, al configurar Application Gateway para Azure SignalR, seleccione Sí para la opción Invalidar con el nuevo nombre de host.Cuando el cliente pase por el proxy inverso a Azure SignalR, establezca
ClientEndpoint
como dirección URL del proxy inverso. Cuando el cliente negocia con el servidor concentrador, el servidor concentrador devolverá la dirección URL definida enClientEndpoint
para que el cliente se conecte. Obtenga más información en este artículo.Hay dos formas de configurar
ClientEndpoint
:Agregue una sección
ClientEndpoint
a ConnectionString:Endpoint=...;AccessKey=...;ClientEndpoint=<reverse-proxy-URL>
Configure
ClientEndpoint
al llamar aAddAzureSignalR
:services.AddSignalR().AddAzureSignalR(o => { o.Endpoints = new Microsoft.Azure.SignalR.ServiceEndpoint[1] { new Microsoft.Azure.SignalR.ServiceEndpoint("<azure-signalr-connection-string>") { ClientEndpoint = new Uri("<reverse-proxy-URL>") } }; })
Cuando un cliente pasa por el proxy inverso hacia Azure SignalR, hay dos tipos de solicitudes:
- Solicitud post HTTP a
<reverse-proxy-URL>/client/negotiate/
, a la que llamamos solicitud de negociación - Solicitud de conexión WebSocket/SSE/LongPolling en función del tipo de transporte a
<reverse-proxy-URL>/client/
, al que llamamos como solicitud de conexión.
Asegúrese de que el proxy inverso admite ambos tipos de transporte para la subruta
/client/
. Por ejemplo, cuando el tipo de transporte es WebSocket, asegúrese de que el proxy inverso admite HTTP y WebSocket para la subruta/client/
.Si ha configurado varios servicios de SignalR detrás del proxy inverso, asegúrese de que la solicitud
negotiate
y la solicitudconnect
con el mismo parámetro de consultaasrs_request_id
(lo que significa que están para la misma conexión) se enrutan a la misma instancia del servicio SignalR.- Solicitud post HTTP a
Cuando se usa el proxy inverso, puede proteger aún más el servicio SignalR mediante la deshabilitación del acceso a la red pública y el uso de puntos de conexión privados para permitir solo el acceso privado desde el proxy inverso al servicio SignalR a través de la red virtual.
Pasos siguientes
Aprenda a trabajar con Application Gateway.
Obtén información sobre cómo trabajar con API Management.
Obtenga más información sobre los aspectos internos de Azure SignalR.