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.
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. Firewall webových aplikací (WAF) proto nemůže analyzovat žádný obsah a neprovádí žádné kontroly těchto dat. Podobně se po navázání připojení WebSocket nepoužijí jakékoli manipulace, jako je přepisování hlaviček, přepisování adresy URL nebo změna názvu hostitele v nastavení back-endu.
Konfigurační prvek naslouchacího zařízení
Existující poslech HTTP lze použít k podpoře provozu WebSocket. Následuje fragment kódu elementu httpListeners z ukázkového souboru šablony. K podpoře protokolu WebSocket a zabezpečení provozu Protokolu WebSocket budete potřebovat naslouchací procesy HTTP i HTTPS. Podobně můžete pomocí portálu nebo Azure PowerShellu vytvořit aplikační bránu s naslouchacími procesy na portu 80/443 pro podporu provozu Protokolu 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í
BackendAddressPool slouží k definování fondu backendových serverů s povolenými servery pro WebSockety. BackendHttpSetting je definovaný s back-endovým portem 80 a 443. Hodnota časového limitu požadavku v nastavení HTTP platí také pro relaci WebSocket. V pravidle směrování není nutná žádná změna, která slouží ke svázání příslušného naslouchacího procesu s odpovídající backendovou skupinou adres.
"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 zajistí, že brána neodešle chybu časového limitu před odesláním příkazu ping klientem; jinak by se na straně klienta zobrazila chyba 1006.
Back-end s povoleným protokolem WebSocket
Aby back-end fungoval, musí mít webový server HTTP/HTTPS spuštěný na nakonfigurovaném portu (obvykle 80/443). Je to proto, že protokol WebSocket vyžaduje, aby počáteční handshake byl HTTP s upgradem na protokol WebSocket jako pole hlavičky. Následuje příklad hlavičky:
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 je to, ž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, dojde k jeho odebrání z back-endového fondu.
Další kroky
Jakmile se seznámíte s podporou protokolu WebSocket, přejděte na vytvoření aplikační brány , abyste mohli začít s webovou aplikací s povolenou webovou aplikací WebSocket.