Megosztás a következőn keresztül:


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. Nincs olyan felhasználói beállítás, amellyel külön lehetne engedélyezni vagy letiltani a WebSocket-támogatást.

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 alkalmazás-átjáró próbákra, amelyeket az állapot-ellenőrzési áttekintés szakasz ismertet. Az Application Gateway állapottesztjei kizárólag HTTP/HTTPS használatával történnek. 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.

A diagram összehasonlítja a webkiszolgálóval kommunikáló ügyfelet, és kétszer csatlakozik két válaszhoz, egy WebSocket-interakcióval, ahol az ügyfél egyszer csatlakozik egy kiszolgálóhoz, hogy több választ kapjon.

Feljegyzés

Miután a kapcsolat a WebSocketre frissült, közvetítő/megszüntető proxyként az Application Gateway egyszerűen elküldi az előtértől kapott adatokat a háttérrendszerbe, és fordítva, ellenőrzési vagy manipulációs képesség nélkül. Ezért a webalkalmazási tűzfal (WAF) nem elemezhet semmilyen tartalmat, és nem végez ellenőrzéseket az ilyen adatokon. Hasonlóképpen, a WebSocket-kapcsolat létrehozása után az olyan manipulációk, mint a fejléc újraírása, az URL-átírások vagy a háttérbeállítások felülírása, nem lesznek érvényesek.

Hallgató 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 és BackendHttpSetting, valamint az ú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-beállítások 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')]"
        }

    }
}]

Feljegyzé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, és a WebSocket protokollra való frissítés a fejléc mezőjeként történjen. 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, kiveszik a háttérkiszolgálói csoportból.

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.