Comment append mod_proxy_wstunnel à Apache2 2.2 sur Raspberry Pi (Backport mod_proxy_wstunnel)

Raspberry Pi est toujours sur Apache 2.2 (2.2.22-13 + deb7u4 en ce moment). Pour utiliser Apache comme proxy pour Websockets (“ProxyPass”), le module Apache mod_proxy_wstunnel est requirejs.

Le module Apache mod_proxy_wstunnel est disponible dans httpd 2.4.5 et versions ultérieures.

Comment append mod_proxy_wstunnel à Apache2 2.2 sur Raspberry Pi (Backport mod_proxy_wstunnel)?

Téléchargez Apache Source, ajoutez le patch de Vitkin, comstackz Apache et ajoutez le module mod_proxy_wstunnel.so aux modules Apache

Détails sur le patch: https://gist.github.com/vitkin/6661683

Étapes détaillées:

# Check apache version (should be 2.2.22 as of writing, if not adjust the next step) dpkg -s apache2 # Checkout apache source svn checkout http://svn.apache.org/repos/asf/httpd/httpd/tags/2.2.22/ httpd-2.2.22 # Get patch and apply it wget https://gist.github.com/vitkin/6661683/raw/873dd8b4de4ad1ff69757ffe48fc574374aedc57/apache-2.2-wstunnel.patch cd httpd-2.2.22 patch -p1 -i ../apache-2.2-wstunnel.patch # Build Apache svn co http://svn.apache.org/repos/asf/apr/apr/twigs/1.4.x srclib/apr svn co http://svn.apache.org/repos/asf/apr/apr-util/twigs/1.3.x srclib/apr-util ./buildconf # EDIT: Some commenters noted that buildconf should be run before the configure ./configure --enable-proxy=shared --enable-proxy_wstunnel=shared make # Copy the module to apache installation sudo cp modules/proxy/.libs/mod_proxy_wstunnel.so /usr/lib/apache2/modules # Create module load file cd /etc/apache2/mods-available sudo echo "LoadModule proxy_wstunnel_module /usr/lib/apache2/modules/mod_proxy_wstunnel.so" > mod_proxy_wstunnel.load # Create symbolic link to load the module cd /etc/apache2/mods-enabled sudo ln -s ../mods-available/proxy_wstunnel.load proxy_wstunnel.load # Add ProxyPass to Site config cd /etc/apache2/sites-available # eg modify default site config with "sudo nano default" # and add the following line inside the VirtualHost element: # "ProxyPass /websockets/mywebsocket ws://mywebsocketserver.com/websockets/mywebsocket" # Restart Apache sudo /etc/init.d/apache2 restart 

J’ai suivi ces étapes pour CentOS 2.2, en supposant que pour Raspberry Pi, il devrait être sur des lignes similaires. J’ai investi beaucoup de temps pour comprendre cela et il y a très peu de documentation disponible pour cela. Faites-moi savoir si cela aide, sinon je peux vous aider à résoudre le problème. J’espère aussi que cela aidera les futurs lecteurs.

Pour comstackr mod_proxy_tunnel.so ,

  1. yum install httpd-devel

  2. Téléchargez le mod_proxy_tunnel.c et comstackz-le en utilisant apxs -i -a -c mod_proxy_tunnel.c

Chargez ensuite le module compilé ci-dessus dans /etc/httpd/modules :

  1. Copiez le mod_proxy_wstunnel.so dans /etc/httpd/modules (compilé ci-dessus)

  2. Pour charger le module au démarrage du serveur, utilisez la directive LoadModule dans le fichier de configuration httpd /etc/httpd/conf/httpd.conf

    Ajoutez la ligne suivante avec toutes les autres lignes LoadModule

     LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so 
  3. Pour redémarrer apache, utilisez le service httpd restart

  4. Pour vérifier les modules chargés apache après le redémarrage, utilisez httpd -M

  5. Une fois le module installé, ajoutez ces deux lignes dans /etc/httpd/conf/httpd.conf :

     ProxyPass /websockets/mywebsocket ws://mywebsocketserver.com//websockets/mywebsocket retry=4 ProxyPassReverse /websockets/mywebsocket ws://mywebsocketserver.com//websockets/mywebsocket retry=4 

Remarque: Assurez-vous que les lignes ci-dessus sont ajoutées avant le cas par défaut de / . Redémarrez également apache juste pour être sûr.

J’avais besoin de ceci pour mon installation du site Traccar . J’ai fait un apt-update / apt-upgrade. J’ai exécuté dpkg -s apache2 qui montrait que j’étais en cours d’exécution Version 2.2.22-13 + deb7u7 . J’ai commencé à suivre les instructions de la réponse de LearningAboutTech ci-dessus . Dans le temps écoulé, une partie du processus a changé:

  1. J’ai commencé avec apt-get install apache2-threaded-dev
  2. J’ai ensuite recherché mod_proxy_wstunnel.c, j’ai utilisé la version ici et l’ai récupérée avec wget
  3. J’ai ensuite utilisé la commande apxs2 -i -a -c mod_proxy_wstunnel.c
  4. Après avoir vérifié les fichiers de configuration, j’ai vu que le module était déjà chargé dans le dossier compatible avec mods .
  5. J’avais déjà ajouté ProxyPass et ProxyReverse dans les fichiers de configuration du site. La prochaine étape consistait à effectuer le redémarrage et le test d’ Apache2 .

En testant le site, il a fonctionné comme prévu, j’ai vu des avertissements dans le fichier d’erreur:

[warn] proxy: Aucun gestionnaire de protocole n’était valide pour l’URL / api / socket. Si vous utilisez une version DSO de mod_proxy, assurez-vous que les sous-modules proxy sont inclus dans la configuration à l’aide de LoadModule.

À un moment donné, je vais aller plus loin – cela peut être lié à ce que je viens de faire ou à une autre configuration dans ma configuration – mais je suis heureux que mon site fonctionne comme prévu!