IEからApacheへSSL通信をすると重くなる処理を改善する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

IEはSSL通信で何かと問題が出る

あるWebサイトを運営していると、IEからSSL通信したときだけサーバーの応答が遅くなることがあります。これは、サーバー側がApacheの時のみに起こる問題です。Apacheの設定ファイルで、User-AgentがIEのときにKeepAlive設定をOFFにしてしまうためです。なぜOFFにするかというと、SSL通信処理周辺で問題があるためです。今回は、この問題を回避して、応答時間を短くしたいと思います。

Apacheのデフォルト設定

ApacheをSSLモジュール付きでインストールすると、初期設定済みの設定ファイルもインストールされます。インストールから設定まで見てみましょう。

$ sudo yum install httpd-devel
$ sudo yum install mod_ssl

設定ファイルを開きます。

$ sudo vi /etc/httpd/conf/httpd.conf

KeepAlive設定はデフォルトでOFFになっていますので、ONに変更します。

KeepAlive On

これは昔の名残で、IE以外の古いブラウザでの不具合に対応するコードです。

BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0

ファイルを保存して閉じた後、次に、SSL関連の設定ファイルを編集します。

$ sudo vi /etc/httpd/conf.d/ssl.conf

これは、IEの場合全てKeepAliveをOFFにする強力な設定上書きです。これは全て消します。

SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

KeepAliveがOFFになると何が問題になるのでしょうか。それは、1つの画像やテキストファイルを読み込む度に初回接続手続き処理を行ってしまいます。そこで、以下のようにIEのバージョン毎に挙動を変えます。古いIEを使っている人は遅いままですが、比較的新しいバージョンを使っていれば毎回初期処理を行いませんので応答が早くなります。新しいIEならSSL周辺の問題も一部解決されているため通用します。

BrowserMatch ".*MSIE [2-5]\..*"  nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
BrowserMatch ".*MSIE [6-9]\..*"  ssl-unclean-shutdown
BrowserMatch ".*MSIE [1-9][\d]+\..*" ssl-unclean-shutdown

SSLのサポートはIE2からですので2-5にしています。次にIE6-9、そしてIE10以上としています。様々なサイトの情報を参考にして書きました。特に、IE10がもうすぐ出ますので、ブラウザ判定時に間違った処理にならないように気をつけています。

設定の中身についてです。nokeepaliveによってKeepAlive設定をOFFにします。downgrade-1.0とforce-response-1.0でHTTP1.0の使用を強制します。ssl-unclean-shutdownの指定によってclosure alertを回避します。

まとめ

Webアプリケーションは、様々なデバイス、OS、ミドルウェア、ブラウザなどが連携して動いています。組み合わせは膨大ですので全てにおいて完璧なアプリは作れません。しかし、よるある問題を事前に回避することで、万が一問題が起こったとしても、原因を局所化することができ、解決も早くなります。過去の知恵を学んで、ハッピーサーバーライフを!

参考資料

SSL 3.0 サーバーのセッション タイムアウト中に、ページを表示できませんというエラーが表示される

Internet Explorer From Wikipedia, the free encyclopedia

Rubular a Ruby regular expression editor

Vista - The IE10 User-Agent String

Dear Apache Software Foundation: FIX THE MSIE SSL KEEPALIVE SETTINGS!

HTTPS and Keep-Alive Connections

httpsでのPOST通信が正常に受信できないときの対策