Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Application Gateway poskytuje nativní podporu protokolu WebSocket ve všech velikostech brány. Neexistuje žádné uživatelsky konfigurovatelné nastavení pro selektivní povolení nebo zakázání podpory protokolu WebSocket.
Protokol WebSocket standardizovaný v RFC6455 umožňuje úplnou duplexní komunikaci mezi serverem a klientem přes dlouhotrvající připojení TCP. Tato funkce umožňuje interaktivnější komunikaci mezi webovým serverem a klientem, což může být obousměrné bez nutnosti dotazování podle požadavků v implementacích založených na protokolu HTTP. Protokol WebSocket má nízkou režii na rozdíl od protokolu HTTP a může opakovaně používat stejné připojení TCP pro více požadavků a odpovědí, což vede k efektivnějšímu využití prostředků. Protokoly WebSocket jsou navržené tak, aby fungovaly přes tradiční porty HTTP 80 a 443. Application Gateway podporuje až 30 000 souběžných připojení WS a 13 500 připojení WSS na instanci.
K příjmu WebSocket provozu můžete dál používat standardní naslouchací program HTTP na portu 80 nebo 443. Provoz protokolu WebSocket je poté přesměrován na server s povoleným protokolem WebSocket pomocí příslušného back-end fondu, jak je specifikováno v pravidlech brány Application Gateway. Back-end server musí reagovat na sondy aplikace Application Gateway, které jsou popsány v části Přehled sond stavu. Sondy stavu služby Application Gateway jsou pouze pro HTTP/HTTPS. Každý backendový server musí reagovat na HTTP testy, aby Application Gateway směroval WebSocket provoz na server.
Používá se v aplikacích, které využívají rychlou komunikaci v reálném čase, jako je chat, řídicí panel a herní aplikace.
Jak funguje WebSocket
K navázání připojení WebSocket se mezi klientem a serverem vyměňuje konkrétní metoda handshake založená na protokolu HTTP. V případě úspěchu se protokol aplikační vrstvy upgraduje z HTTP na WebSockets pomocí dříve vytvořeného připojení TCP. Jakmile k tomu dojde, HTTP je zcela mimo obrázek; data lze odesílat nebo přijímat pomocí protokolu WebSocket oběma koncovými body, dokud se připojení WebSocket neuzavře.
Poznámka:
Po upgradu připojení na WebSocket jako zprostředkující/ukončující proxy server služba Application Gateway jednoduše odešle data přijatá z front-endu do back-endu a naopak bez jakékoli kontroly nebo manipulace. Proto Web Application Firewall (WAF) nemůže analyzovat žádný obsah a neprovádí žádné kontroly těchto dat. Podobně se po navázání připojení WebSocket již neuplatní žádné úpravy, jako je přepisování hlaviček, adres URL nebo hostitelského názvu v nastavení backendu.
Konfigurační prvek naslouchacího zařízení
Existující poslech HTTP lze použít k podpoře provozu WebSocket. Následující fragment kódu ukazuje httpListeners prvek z ukázkového souboru šablony. K podpoře provozu WebSocket i zabezpečeného WebSocketu potřebujete listenery HTTP i HTTPS. Podobně můžete pomocí portálu nebo Azure PowerShell vytvořit aplikační bránu s naslouchacími procesy na portu 80 a 443 pro podporu provozu WebSocket.
"httpListeners": [
{
"name": "appGatewayHttpsListener",
"properties": {
"FrontendIPConfiguration": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendIPConfigurations/DefaultFrontendPublicIP"
},
"FrontendPort": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendPorts/appGatewayFrontendPort443'"
},
"Protocol": "Https",
"SslCertificate": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/sslCertificates/appGatewaySslCert1'"
},
}
},
{
"name": "appGatewayHttpListener",
"properties": {
"FrontendIPConfiguration": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendIPConfigurations/appGatewayFrontendIP'"
},
"FrontendPort": {
"Id": "/subscriptions/{subscriptionId/resourceGroups/{resourceGroupName/providers/Microsoft.Network/applicationGateways/{applicationGatewayName/frontendPorts/appGatewayFrontendPort80'"
},
"Protocol": "Http",
}
}
],
Konfigurace BackendAddressPool, BackendHttpSetting a pravidla směrování
Pomocí BackendAddressPool definujte back-endový fond se servery s podporou protokolu WebSocket. Definujte back-endHttpSetting s back-endovými porty 80 a 443. Hodnota časového limitu požadavku v nastavení HTTP platí také pro relaci WebSocket. Nemusíte měnit pravidlo směrování, které propojuje příslušný naslouchač s odpovídajícím fondem adres back-endu.
"requestRoutingRules": [{
"name": "<ruleName1>",
"properties": {
"RuleType": "Basic",
"httpListener": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/httpListeners/appGatewayHttpsListener')]"
},
"backendAddressPool": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/ContosoServerPool')]"
},
"backendHttpSettings": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendHttpSettingsCollection/appGatewayBackendHttpSettings')]"
}
}
}, {
"name": "<ruleName2>",
"properties": {
"RuleType": "Basic",
"httpListener": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/httpListeners/appGatewayHttpListener')]"
},
"backendAddressPool": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/ContosoServerPool')]"
},
"backendHttpSettings": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendHttpSettingsCollection/appGatewayBackendHttpSettings')]"
}
}
}]
Poznámka:
Ujistěte se, že vaše hodnota timeoutu je větší než serverem definovaný interval ping/pong, abyste se vyhnuli chybám časového limitu před odesláním pingu z klienta. Typická hodnota protokolu WebSocket je 20 sekund, takže například hodnota časového limitu 40 sekund zajišťuje, že brána neodešle chybu časového limitu před odesláním příkazu ping. V opačném případě tato podmínka vyvolá na straně klienta chybu 1006.
Back-end s podporou protokolu WebSocket
Aby back-end fungoval, musí mít webový server HTTP/HTTPS spuštěný na nakonfigurovaném portu (obvykle 80 nebo 443). Tento požadavek existuje, protože protokol WebSocket vyžaduje, aby počáteční navázání spojení proběhlo přes HTTP s přechodem na protokol WebSocket prostřednictvím pole záhlaví. Následující příklad ukazuje záhlaví:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: https://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Dalším důvodem tohoto požadavku je, že back-endová sonda stavu služby Application Gateway podporuje pouze protokoly HTTP a HTTPS. Pokud back-endový server nereaguje na testy HTTP nebo HTTPS, brána ho odebere z back-endového fondu.
Další kroky
Jakmile se seznámíte s podporou protokolu WebSocket, přejděte k vytvoření aplikační brány , abyste mohli začít s webovou aplikací s podporou protokolu WebSocket.