プロキシサーバー経由でファイルがダウンロード出来ない問題への対応

ie6-squid-problem

先日、弊社のお客様より、ブラウザを利用して大きい容量のファイルがダウンロードできないというお問い合わせを頂きました。ダウンロード出来ないファイルはLinuxのインストールメディア用isoファイルで容量が3GB程度あり、ダウンロード中に突然終了してしまうというお話。さらに詳しく話を聞いてみると、途中まではダウンロードできるが、ある一定のダウンロード量になると、ダウンロードが突如終わってしまう。

お客様の環境ではインターネットへ接続するためにプロキシサーバーを利用しており、このプロキシ設定を外すと、ダウンロードに成功することから、プロキシサーバーが原因ではと考えておられました。
上記の情報を基に調査を行った結果、プロキシサーバーだけが原因ではないことが分かりました。
ここ最近は、余り合致することのない情報だと思いますが、調査した内容が何かの約に立つ可能性もありますので、原因と対策を紹介したいと思います。

1. isoファイルがダウンロードできない原因

isoファイルがダウンロードできない原因は、プロキシサーバーだけでなく、ブラウザ側にもありました。お客様の環境で利用しているブラウザが古くサポートが切れているもの、これが原因の一つ、もう一つはプロキシサーバー側の設定でした。

1-1. ブラウザとしてInternet Explorer6を利用していた。

プロキシサーバーを経由して2GB以上のファイルがダウンロードできない原因の一つ目はブラウザにありました。お客様が利用しているブラウザはサポートが終了しているInternet Explorer6で、このブラウザにはあるバグがあります。具体的にはマイクロソフトのKB298618

「Internet Explorer6で2GB以上のファイルがダウンロードできない。」

が該当します。
このバグは、httpサーバーとクライアント間で特定の接続状態になっているときに2GB以上のファイルがダウンロードできないという内容。今回の問題はInternet Explorer6を利用していたことにより、このバグの影響があったことが挙げられます。

1-2. keep-aliveが有効になっていた。

原因の二つ目は、Internet Explorer6とプロキシサーバー間でkeep-aliveが有効になっていたことです。1-1に記載したKBでは、2GB以上のファイルがダウンロードできないバグは、WEBサーバ側でkeep-aliveが有効になっている場合と記載されています。keep-aliveはクライアント側で変更が出来ないので、サーバー側での対処が必要になりますが、プロキシサーバーを経由しない状態で、isoファイルをダウンロード中にパケットキャプチャしてみても、keep-aliveは有効になっていないようです。
上記からプロキシサーバーを経由する場合のみ、keep-aliveが有効になっているのではと考え、調査を進めました。

2. プロキシサーバーを経由した場合のkeep-aliveを調査

Internet Explorer6 にプロキシサーバーを設定してisoファイルをダウンロードし、httpのポート状態のパケットキャプチャを行いました。
その結果、プロキシサーバーとクライアント間でkeep-aliveが有効になっていることが確認できました。webサーバーとクライアント間では、keep-aliveが有効になっていなくても、プロキシサーバーを経由すると、プロキシサーバーからクライアント間で、keep-aliveが有効になってしまうため、結果として、Internet Explorer6のバグであるKB298618に引っかかってしまい、ダウンロードが2GBを超えると、終了してしまうということが分かりました。

3. 対応方法

Intetnet Explorer 6を現在、利用している環境は殆どないと思いますので、対応を行う場面はそれ程ないかと思いますが(仮にあったとしても、他のブラウザを利用するなどで回避できます。)
この問題については、プロキシサーバーの設定変更で回避が可能でした。
その方法を紹介します。なお、プロキシサーバーはLinuxにインストールしたsquidというオープンソースのプロキシサービスを利用している前提です。

対応方法としてはプロキシサーバーであるsquidとクライアント間での接続を行う際、デフォルトで有効になっているkeep-aliveを無効にするという設定があるので、この設定を有効にします。
squidの設定ファイルはsquid.confになります。パッケージでインストールしていると、/etc/squidフォルダにあるパターンが多いようです。このsquid.confに以下の記載を追加します。

client_persistent_connections off
server_persistent_connections off

追加後にsquidを再起動することで設定が有効になります。
この設定を行う場合、keep-aliveが無効になりますので、サーバ – クライアント間のセッションが多数になりサーバ負荷が増加することが考えられます。その点を注意して設定を行って下さい。Internet Explorer6を利用していなくとも、プロキシサーバーを利用していてkeep-aliveを無効にしたいという場合は上記で対応が可能です。

補足としてInternet Explorer6には、元々、4GB以上のファイルをダウンロードできないという制約がありますので、プロキシサーバーとは関係なく4GB以上のファイルはダウンロードすることはできません。

  • この記事を書いた人
rem-profile-photo

レムシステム

レムシステムはPC・サーバー・ネットワークでの業務効率化を主な業務としている会社です。全国に対応しています。

-オープンソース