Az Application Gateway WebSocket-támogatásának áttekintése

Az Application Gateway natív támogatást nyújt a WebSockethez minden átjáróméret esetében. Kizárólag WebSocket-támogatásra vonatkozó felhasználói beállítás nem létezik.

A RFC6455 szabványosított WebSocket protokoll teljes kétirányú kommunikációt tesz lehetővé egy kiszolgáló és egy ügyfél között egy hosszú ideig futó TCP-kapcsolaton keresztül. Ez a funkció interaktívabb kommunikációt tesz lehetővé a webkiszolgáló és az ügyfél között, ami kétirányú lehet anélkül, hogy a HTTP-alapú implementációkban szükség lenne a lekérdezésre. A WebSocket a HTTP-vel ellentétben alacsony többletterheléssel rendelkezik, és ugyanazt a TCP-kapcsolatot több kérelem/válasz esetében is újra felhasználhatja, ami az erőforrások hatékonyabb kihasználását eredményezi. A WebSocket protokollok úgy vannak kialakítva, hogy a hagyományos 80-443-ból álló HTTP-portokon működjenek.

A WebSocket-forgalom fogadásához továbbra is használhat egy szabványos HTTP-figyelőt a 80-s vagy a 443-as porton. A WebSocket-forgalom ezután a WebSocket-kompatibilis háttérkiszolgálóra lesz irányítva az Application Gateway-szabályokban megadott megfelelő háttérkészlet használatával. A háttérkiszolgálónak válaszolnia kell az Application Gateway-mintavételekre, amelyeket az állapotadat-mintavétel áttekintési szakasza ismertet. Az Application Gateway állapottesztjei csak HTTP/HTTPS. Minden háttérkiszolgálónak válaszolnia kell az Application Gateway HTTP-mintavételeire, hogy a WebSocket-forgalmat a kiszolgálóra irányíthassa.

Olyan alkalmazásokban használják, amelyek kihasználják a gyors, valós idejű kommunikációt, például a csevegést, az irányítópultot és a játékalkalmazásokat.

A WebSocket működése

WebSocket-kapcsolat létrehozásához a rendszer egy adott HTTP-alapú kézfogást cserél az ügyfél és a kiszolgáló között. Ha sikeres, az alkalmazásréteg protokollja HTTP-ről WebSocketsre "frissítve" lesz a korábban létrehozott TCP-kapcsolat használatával. Ha ez megtörténik, a HTTP teljesen ki van fogyott a képből; Az adatok a WebSocket protokoll használatával mindkét végponton elküldhetők vagy fogadhatók, amíg a WebSocket-kapcsolat be nem záródik.

Diagram compares a client interacting with a web server, connecting twice to get two replies, with a WebSocket interaction, where a client connects to a server once to get multiple replies.

Megjegyzés:

A leírtaknak megfelelően a HTTP protokoll csak kézfogás végrehajtására szolgál a WebSocket-kapcsolat létrehozásakor. A kézfogás befejezése után megnyílik egy WebSocket-kapcsolat az adatok továbbításához, és a webalkalmazási tűzfal (WAF) nem tud tartalmat elemezni. Ezért a WAF nem végez ellenőrzéseket az ilyen adatokon.

Figyelő konfigurációs elem

Egy meglévő HTTP-figyelő használható a WebSocket-forgalom támogatásához. A következő egy mintasablonfájlból származó httpListeners-elem kódrészlete. A WebSocket támogatásához és a WebSocket-forgalom biztonságossá tételéhez HTTP- és HTTPS-figyelőkre is szükség van. Hasonlóképpen a portál vagy az Azure PowerShell használatával is létrehozhat egy alkalmazásátjárót a 80/443-as port figyelőivel a WebSocket-forgalom támogatásához.

"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",
            }
        }
    ],

BackendAddressPool, BackendHttpSetting és Útválasztási szabály konfigurációja

A BackendAddressPool a WebSocket-kompatibilis kiszolgálókkal rendelkező háttérkészletek definiálására szolgál. AHttpSetting háttérrendszer egy 80-at és 443-at tartalmazó háttérporttal van definiálva. A HTTP-Gépház kérés időtúllépési értéke a WebSocket-munkamenetre is vonatkozik. Nincs szükség módosításra az útválasztási szabályban, amely a megfelelő figyelőt a megfelelő háttércímkészlethez köti.

"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')]"
        }

    }
}]

Megjegyzés:

Győződjön meg arról, hogy az időtúllépési érték nagyobb, mint a kiszolgáló által megadott ping/pong intervallum, hogy ne tapasztaljon időtúllépési hibákat, mielőtt az ügyfél pingelést küld. A WebSocket tipikus értéke 20 másodperc, így például egy 40 másodperces időtúllépési érték biztosítja, hogy az átjáró ne küldjön időtúllépési hibát, mielőtt az ügyfél pingelést küld; ellenkező esetben 1006-os hiba jelenik meg az ügyféloldalon.

WebSocket-kompatibilis háttérrendszer

A websocket működéséhez a háttérrendszernek http/HTTPS-webkiszolgálóval kell rendelkeznie a konfigurált porton (általában 80/443). Ennek a követelménynek az az oka, hogy a WebSocket protokoll megköveteli, hogy a kezdeti kézfogás HTTP legyen a WebSocket protokollra való frissítéssel fejlécmezőként. Az alábbi példa egy fejlécre mutat:

    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

Ennek egy másik oka, hogy az Application Gateway háttérrendszerének állapotadat-mintavétele csak a HTTP- és HTTPS-protokollokat támogatja. Ha a háttérkiszolgáló nem válaszol a HTTP- vagy HTTPS-mintavételekre, a háttérkészletből veszi ki.

Következő lépések

Miután megismerkedett a WebSocket támogatásával, hozzon létre egy Application Gatewayt a WebSocket-kompatibilis webalkalmazás használatának megkezdéséhez.