Serveur HTTP Apache Version 2.4

Apache > Serveur HTTP > Documentation > Version 2.4 > Modules

# Module Apache mod_proxy_wstunnel

Description: | Module pour `mod_proxy` supportant les websockets
Statut: | Extension
Identificateur de Module: | proxy_wstunnel_module
Fichier Source: | mod_proxy_wstunnel.c
Compatibilité: | Disponible à partir de la version 2.4.5 du serveur HTTP Apache

### Sommaire

### Obsolescence

Depuis la version 2.4.47 du serveur HTTP Apache, la promotion de protocole (tunneling) peut être pris en charge de manière plus efficace par `mod_proxy_http`.

Voir Promotion de protocole.

Pour utiliser ce module, `mod_proxy` doit être chargé. Il fournit le support du tunnelling pour les connexions websocket vers un serveur websockets d'arrière-plan. La connexion est automatiquement promue en connexion websocket :

### Réponse HTTP

    Upgrade: WebSocket
    Connection: Upgrade

Le mandatement des requêtes vers un serveur websockets comme `echo.websocket.org` peut être configuré via la directive `ProxyPass` :

    ProxyPass "/ws2/"  "ws://echo.websocket.org/"
    ProxyPass "/wss2/" "wss://echo.websocket.org/"

Il est possible de mandater les websockets et HTTP en même temps, avec un jeu spécifique d'URLs pour les websockets, en définissant la directive `ProxyPass` concernant les websockets avant celle concernant HTTP :

    ProxyPassMatch ^/(myApp/ws)$  ws://backend.example.com:9080/$1
    ProxyPass / http://backend.example.com:9080/

Il est possible de mandater les websockets et HTTP en même temps, lorsque les URLs websockets ne concernent pas uniquement les websockets ou ne sont pas connues à l'avance, en utilisant la directive `RewriteRule` pour configurer le mandatement des websockets :

    ProxyPass / http://example.com:9080/
    RewriteEngine on
    RewriteCond %{HTTP:Upgrade} websocket [NC]
    RewriteCond %{HTTP:Connection} upgrade [NC]
    RewriteRule ^/?(.*) "ws://example.com:9080/$1" [P,L]

La répartition de charge entre plusieurs serveurs d'arrière-plan peut être configurée via le module `mod_proxy_balancer`.

Ce module peut aussi être utilisé pour la promotion vers des protocoles autres que WebSocket en définissant le paramètre upgrade de la directive `ProxyPass` avec un nom de protocole particulier. Les valeurs spéciales `upgrade=NONE` et `upgrade=ANY` peuvent être utilisées pour tester ou forcer la promotion de protocole mais leur utilisation n'est pas recommandée en production pour des raisons de sécurité. `NONE` signifie que la vérification de l'en-tête est omise mais que la promotion (tunneling) vers WebSocket s'effectuera quand-même. `ANY` signifie que la promotion (tunneling) s'effectuera en utilisant tout protocole demandé par le client.

### Directives

### Traitement des bugs

- Journal des modifications de httpd
- Problèmes connus
- Signaler un bug

### Voir aussi

- `mod_proxy`

## Directive ProxyWebsocketFallbackToProxyHttp

Description: | Demande à ce module de laisser `mod_proxy_http` gérer la requête
Syntaxe: | `ProxyWebsocketFallbackToProxyHttp On|Off`
Défaut: | `ProxyWebsocketFallbackToProxyHttp On`
Contexte: | configuration globale, serveur virtuel
Statut: | Extension
Module: | mod_proxy_wstunnel
Compatibilité: | Disponible à partir de la version 2.4.48 du serveur HTTP Apache

Depuis la version 2.4.47 de httpd, `mod_proxy_http` peut gérer le tunneling et la mise à jour via les WebSockets en accord avec la RFC 7230 ; cette directive permet de définir si, pour ces actions, `mod_proxy_wstunnel` doit passer la main à `mod_proxy_http`, ce qui est le cas par défaut.

Définir cette directive à Off revient à laisser `mod_proxy_wstunnel` gérer les requêtes WebSocket, comme avec les versions 2.4.46 et antérieures de httpd.