web-dev-qa-db-ja.com

RaspberryPiのApache22.2にmod_proxy_wstunnelを追加する方法(バックポートmod_proxy_wstunnel)

RaspberryPiはまだApache2.2上にあります(現在2.2.22-13 + deb7u4)。 ApacheをWebsocketのプロキシ( "ProxyPass")として使用するには、Apacheモジュールmod_proxy_wstunnelが必要です。

Apacheモジュールmod_proxy_wstunnelは、httpd2.4.5以降で使用できます。

RaspberryPiのApache22.2(Backport mod_proxy_wstunnel)にmod_proxy_wstunnelを追加するにはどうすればよいですか?

6
Schelldorfer

Apache Sourceをダウンロードし、Vitkinからパッチを追加し、Apacheをコンパイルして、モジュールmod_proxy_wstunnel.soをApacheモジュールに追加します。

パッチの詳細: https://Gist.github.com/vitkin/666168

詳細な手順:

# 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/branches/1.4.x srclib/apr
svn co http://svn.Apache.org/repos/asf/apr/apr-util/branches/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" > 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

# e.g. 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
8
Schelldorfer

CentOS 2.2の場合は、これらの手順に従いました。RaspberryPiの場合は、同様の行にあるはずです。私はこれを理解するために多くの時間を費やしましたが、これについて利用できるドキュメントはほとんどありません。これが役立つかどうか教えてください。そうでない場合は、問題のトラブルシューティングをお手伝いします。また、これが将来の読者に役立つことを願っています。

mod_proxy_tunnel.soをコンパイルするには、

  1. yum install httpd-devel

  2. mod_proxy_tunnel.cをダウンロードし、apxs -i -a -c mod_proxy_tunnel.cを使用してコンパイルします

次に、上記のコンパイル済みモジュールを/etc/httpd/modulesにロードします。

  1. mod_proxy_wstunnel.so/etc/httpd/modulesにコピーします(上からコンパイル)

  2. サーバーの起動中にモジュールをロードするには、httpdconfファイルでLoadModuleディレクティブを使用します/etc/httpd/conf/httpd.conf

    次の行を他のすべてのLoadModule行と一緒に追加します

    LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
    
  3. Apacheを再起動するには、service httpd restartを使用します

  4. 再起動後にApacheにロードされたモジュールを確認するには、httpd -Mを使用します

  5. モジュールをインストールしたら、次の2行を/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
    

注:デフォルトの/の前に上記の行が追加されていることを確認してください。また、安全のためにApacheを再起動してください。

4

Traccarサイト のインストールにこれが必要でした。 apt-update/apt-upgradeを実行しました。 dpkg -s Apache2を実行したところ、実行中であることがわかりましたVersion:2.2.22-13 + deb7u7上記のLearningAboutTechの回答 の指示に従い始めました。時間が経つにつれて、プロセスの一部が変更されました。

  1. 私はapt-get install Apache2-threaded-devから始めました
  2. 次に、mod_proxy_wstunnel.cを探し、バージョンを使用しました ここ 、wgetでフェッチしました
  3. 次に、コマンドを使用しましたapxs2 -i -a -c mod_proxy_wstunnel.c
  4. 構成ファイルを確認したところ、モジュールがすでにmods-enabledフォルダーにロードされていることがわかりました。
  5. ProxyPassとProxyReverseをサイト構成ファイルにすでに追加しました。それで、次のことはservice Apache2 restartそしてテストすることでした。

サイトをテストすると、期待どおりに実行されました。エラーファイルに警告が表示されました。

[警告]プロキシ:URL/api/socketに対して有効なプロトコルハンドラーがありませんでした。 mod_proxyのDSOバージョンを使用している場合は、LoadModuleを使用してプロキシサブモジュールが構成に含まれていることを確認してください。

ある時点で、これをさらに詳しく調べます-これは、今行ったことやセットアップの他の構成に関連している可能性があります-しかし、私のサイトが期待どおりに機能していることを嬉しく思います!

3
Bryan