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 に変更
# AllowOverride None
AllowOverride All
mod_mime, mod_deflate を有効にする
viで開いて、モジュール名で検索して、下のようにコメントアウト行をコピーしてコメントを外す。
#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)で作成する。
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 らしいので、同じように設定できたの巻、でした。