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を追加するにはどうすればよいですか?
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
CentOS 2.2の場合は、これらの手順に従いました。RaspberryPiの場合は、同様の行にあるはずです。私はこれを理解するために多くの時間を費やしましたが、これについて利用できるドキュメントはほとんどありません。これが役立つかどうか教えてください。そうでない場合は、問題のトラブルシューティングをお手伝いします。また、これが将来の読者に役立つことを願っています。
mod_proxy_tunnel.so
をコンパイルするには、
yum install httpd-devel
mod_proxy_tunnel.c
をダウンロードし、apxs -i -a -c mod_proxy_tunnel.c
を使用してコンパイルします
次に、上記のコンパイル済みモジュールを/etc/httpd/modules
にロードします。
mod_proxy_wstunnel.so
を/etc/httpd/modules
にコピーします(上からコンパイル)
サーバーの起動中にモジュールをロードするには、httpdconfファイルでLoadModule
ディレクティブを使用します/etc/httpd/conf/httpd.conf
次の行を他のすべてのLoadModule行と一緒に追加します
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
Apacheを再起動するには、service httpd restart
を使用します
再起動後にApacheにロードされたモジュールを確認するには、httpd -M
を使用します
モジュールをインストールしたら、次の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を再起動してください。
Traccarサイト のインストールにこれが必要でした。 apt-update/apt-upgradeを実行しました。 dpkg -s Apache2を実行したところ、実行中であることがわかりましたVersion:2.2.22-13 + deb7u7。 上記のLearningAboutTechの回答 の指示に従い始めました。時間が経つにつれて、プロセスの一部が変更されました。
サイトをテストすると、期待どおりに実行されました。エラーファイルに警告が表示されました。
[警告]プロキシ:URL/api/socketに対して有効なプロトコルハンドラーがありませんでした。 mod_proxyのDSOバージョンを使用している場合は、LoadModuleを使用してプロキシサブモジュールが構成に含まれていることを確認してください。
ある時点で、これをさらに詳しく調べます-これは、今行ったことやセットアップの他の構成に関連している可能性があります-しかし、私のサイトが期待どおりに機能していることを嬉しく思います!