web-dev-qa-db-ja.com

ローカルネットワークで提供されるファイルへのプロキシおよびコードインジェクションへのルーティング

Open Device Lab を設定しようとしています。

この質問は、テストデバイスによって行われた要求への応答へのコードのネットワークルーティングと挿入に焦点を当てています。

私は人々が彼らのラップトップを持って来て、できるだけ痛みを伴わずにテストできるようにしたいと思っています。開発者に次のことができるようにしたいと思います。

  • モバイルブラウザを検査し、
  • ファイルの変更時にすべてのページを更新する必要はありません。
  • 各デバイスを個別にナビゲートする必要はありません。

これを達成するために、私は次のテクノロジーを(それぞれ)使用することを選択しました。

これらのテクノロジーはすべて、サーバープログラムとのソケット接続を開いて維持するために、要求されたWebページにJavaScriptスニペットを必要とします。プロキシサーバーを使用してこれらのスニペットを挿入したいと思います。

以下は、テストネットワークのセットアップ方法のイメージです。

http://i.stack.imgur.com/klGJF.png

ラボのさまざまな部分の役割について簡単に説明します。

ローカルWebサーバー+テストデバイス

このマシンは、開発者が選択したWebサーバー(Apache、Nginx、IISなど)を実行するために使用するマシンです。問題ではありません)。これはテストデバイスとしても機能します。開発者は、ファイルが変更されたときにLiveReloadサーバーに通知するソフトウェアをインストールする必要があります( guard-livereload など)。 WiFi経由でルーターに接続します。

テストデバイス

これらは、ラボがここにある理由であるモバイルデバイスです。それらがレンダリングするWebページは、weinreを使用して検査可能であり、LiveReloadを使用してファイル変更時に更新し、他のデバイスがShimを使用してナビゲートするときにナビゲートします。彼らはWiFi経由でルーターに接続します。

ルーター

ルーターは、ポート80で処理されるすべての要求にプロキシサーバーを使用します。また、プロキシサーバーマシンをDNSサーバーとして使用します。

プロキシサーバー

このサーバーは単なるプロキシサーバーではありません。そのタスクは次のとおりです。

  • dNSサーバー(ローカルテストドメインが各デバイスを個別に構成することなく機能するように、これに Smbind を使用することを考えます)、
  • プロキシサーバー(JavaScriptスニペットを挿入するため)、
  • weinreサーバー(接続されているWebKitクライアントを検査できるようにするため)、
  • liveReloadサーバー(接続されているすべてのブラウザーに信号を送り、必要に応じてページ全体またはそのリソースの一部を更新する)、
  • shimサーバー(接続されているすべてのブラウザーに適切なときにナビゲートするように通知するため)、および
  • ネットワーク速度スロットル(低速接続をシミュレートするため)。

TL; DR

私が苦労しているのは次のとおりです。

  • どのプロキシソフトウェアがリクエストにコードを挿入できますか?
  • HTML(MIMEタイプで示される)で</body>を含むローカルポート80リクエストにのみコードを挿入するにはどうすればよいですか(「ローカル」はテストネットワークを指し、より広いインターネットに送信されるリクエストではありません) ?また、コードは</body>の直前に挿入する必要があります。
  • (コードとスロットル速度を挿入できるように)プロキシを介してすべてのトラフィックを透過的にルーティングするにはどうすればよいですか?つまり、現在の設定でも機能しますか?

どうぞよろしくお願いいたします。

4
Xandor Schiefer

ICAPの提案に感謝しますが、オープンソースのICAPサーバーは古くなっているか、文書化が不十分です。サイコロを使わずに、ICAPソリューションのセットアップに数日を費やしました。

そこで、プロキシとしてApacheを使用しました。私はそれを透過的なフォワードプロキシとして構成し、フィルターチェーンを膨張(コンテンツが収縮した場合)、置換、および収縮(最初に収縮した場合)するように構成しました。これは魅力のように機能します。

プロキシを介してすべてのトラフィックをルーティングするという点では、すべてのデバイスとローカルWebサーバーに個別のアクセスポイントがあります。それらは異なるサブネット上にあるため、ルーター(プロキシマシンと同じ)は2つの間でトラフィックをルーティングし、プロキシを介してトラフィックを送信する必要があります。

アクセスポイントが1つしかない場合、アウトバウンドトラフィックがプロキシを通過するという問題がありましたが、ローカルトラフィックは通過しませんでした。

終了したら、デバイスラボのセットアップ方法についてさらに詳細な記事を投稿します。私はまだいくつかのことを考えています(この質問とは関係ありません)。

1
Xandor Schiefer

あなたがおそらく探している機能は ICAP(インターネットコンテンツ適応プロトコル) です。

それを処理するPythonフレームワーク( http://icap-server.sourceforge.net/ ))があり、Squid自体に機能がある可能性があります( 少なくとも開発中 )。

Squid Wikiの詳細(および他のICAPサーバーのリスト)は http://wiki.squid-cache.org/Features/ICAP#ICAP_Servers

2
sw00