gzip
docker
deflate
ibm-http-server

DockerHub の ibmcom/ibm-http-server をベースに deflate の実験をした時のメモ

前提

.htaccess を使ってディレクトリーごとの設定として実験する。
コンテナー起動

  docker run -name ihs -h ihs -it -v "$PWD":/opt/IBM/HTTPServer/htdocs/s ibmcom/ibm-http-server bash

bash の画面になったらサーバー起動

/opt/IBM/HTTPServer/bin/apachectl start

設定ファイル、開くhtml文書の場所

http.conf : /opt/IBM/HTTPServer/conf
.htaccess : /opt/IBM/HTTPServer/htdocs/s
a.html : /opt/IBM/HTTPServer/htdocs/s

準備

コンテナで vi が使えないのでインストールする。

apt-get update
apt-get install vim
vim ~/.vimrc  # set number など設定をして保存
vim ~/.bashrc # bash の設定もついでにどうぞ

この状態をコンテナー再起動後も使いたいなら、ここで一旦コンテナーを止めてイメージを作成する。

(例)

docker commit ihs myihs

保存したら run する際に、ibmcom/ibm-http-server の代わりに保存したイメージ(myihs)を起動対象としてコンテナーを起動する。

ディレクトリごとの設定を有効にする

http.conf を編集。
セクションの中の AllowOverride を None から All に変更

http.conf
#    AllowOverride None
    AllowOverride All

mod_mime, mod_deflate を有効にする

viで開いて、モジュール名で検索して、下のようにコメントアウト行をコピーしてコメントを外す。

http.conf
#LoadModule mime_module modules/mod_mime.so
LoadModule mime_module modules/mod_mime.so

#LoadModule deflate_module modules/mod_deflate.so
LoadModule deflate_module modules/mod_deflate.so

モジュールの意味

mod_mime は AddOutputFilterByType ディレクティブを使用するのに必要。
mod_deflate は gzip する機能そのもの。

.htaccess を作る

一旦コンテナーから ^p^q で抜けてファイルを作る。

^p^q
### ここでホストに戻っている ###
vi .htaccess 

中身は次のような内容。
DirectoryIndex a.htmlを指定しているのはこのファイルが IHS に認識されているかどうかの確認用に、ファイル名省略時の URL で開くファイル名をデフォルトのindex.htmlから変更している。あとで実際に deflate が効くかどうかを試すための html をその名前(a.html)で作成する。

.htaccess
DirectoryIndex a.html

<IfModule mod_deflate.c>
     SetOutputFilter DEFLATE

     # Mozilla4系などの古いブラウザで無効、しかしMSIEは除外
     BrowserMatch ^Mozilla/4\.0[678] no-gzip
     BrowserMatch ^Mozilla/4 gzip-only-text/html
     BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

     # gifやjpgなど圧縮済みのコンテンツは再圧縮しない
     SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary
     SetEnvIfNoCase Request_URI _\.utxt$ no-gzip

     # htmlやcssなどは圧縮
     AddOutputFilterByType DEFLATE text/plain
     AddOutputFilterByType DEFLATE text/html
     AddOutputFilterByType DEFLATE text/xml
     AddOutputFilterByType DEFLATE text/css
     AddOutputFilterByType DEFLATE application/xhtml+xml
     AddOutputFilterByType DEFLATE application/xml
     AddOutputFilterByType DEFLATE application/rss+xml
     AddOutputFilterByType DEFLATE application/atom_xml
     AddOutputFilterByType DEFLATE application/x-javascript
     AddOutputFilterByType DEFLATE application/x-httpd-php
</IfModule>

(参考:Apacheのmod_deflateでコンテンツを圧縮してサイトを高速化する方法 )

終わりに

世の中の情報は Apache なり Apache2 の情報が多いが、一応 IHS のベースが Apache HTTP Server らしいので、同じように設定できたの巻、でした。