モジュールの一覧表示、追加
組み込まれているモジュールの一覧を表示する
# apachectl
$ apachectl -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
モジュールの追加
モジュールの追加方法は2通りある。
-
1.DSOのモジュールをインストールする
動的共有オブジェクト(DSO:Dynamic Shared Object)としてコンパイルする -
2.モジュールをApacheの実行ファイルに組み込む
サーバがビルドされるときにhttpdバイナリに静的に組み込む
1.DSOのモジュールをインストールする
インストールされているモジュールを有効にする
LoadModule:DSOのモジュールをApacheに追加する
# The following modules are not loaded by default:
#
LoadModule asis_module modules/mod_asis.so
OSで用意されているモジュールをインストールする
$ yum install mod_wsgi
2.モジュールをApacheの実行ファイルに組み込む
DSOモジュールをコンパイルする場合
コンパイルして追加する
## ソースのあるディレクトリに移動
$ cd ~/src/httpd-2.2.27/modules/mappers/
## コンパイルとインストールの実行処理
# /usr/local/apache2/ :apacheをインストールしたディレクトリ
# apxs :apacheを拡張するためのツール
# -cia :コンパイルとインストールの設定ファイルに追加
$ /usr/local/apache2/bin/apxs -cia mod_rewrite.c
モジュールのインストールを確認する
$ ls /usr/local/apache2/modules
httpd.exp mod_rewrite.so
設定ファイルを確認する
$ less /usr/local/apache2/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
組み込みのモジュールを指定する場合
# ソースのディレクトリに移動
$ cd ~/src/httpd-2.2.27
# ./configure :設定プログラムを実行する
# --enable-info :モジュールmod_infoを指定
$ ./configure --enable-suexe --with-suexec-docroot=/home--enable-info
$ make #設定処理の実行(コンパイル)
$ make install #インストール
データを圧縮して送る(mod_deflate)
データを圧縮することで利用している回線に設定されている転送速度や転送量の制限に対応できる。
mod_deflateを使うと、Apacheがクライアントにデータ送信する前に自動的にデータを圧縮してから送信する。データを受け取ったWEBブラウザはヘッダー情報から判断して自動的にデータを復元する。
回線がボトルネックの場合に有効でサーバーの性能がボトルネックの場合は圧縮処理でサーバーに負荷がかかるので逆効果になる。
# -lz:モジュール作成時にzlibを組み込むオプション
$ cd ~/src/httpd-2.2.27/modules/filters/
$ /usr/local/apache2/bin/apxs -cia mod_deflate.c -lz
mod_deflateの設定を追加する
## IFModule:モジュールが追加されている時のみ有効な設定
<IfModule mod_deflate.c>
## AddOutputFilterByType:レスポンスを処理するフィルターにMIMEタイプを割り当てる
# text/html形式にフィルターDEFLATEを当てる
AddOutputFilterByType DEFLATE text/html
</IfModule>
違うURLでアクセスさせる(mod_rewrite)
mod_rewriteはユーザーがアクセスしたURLを別のURLに変換する機能を持つ。AliasやScriptAliasより高度な転送設定が可能。
$ cd ~/src/httpd-2.2.27/modules/mappers/
$ /usr/local/apache2/bin/apxs -cia mod_rewrite.c
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/(hello|env)\.html /usr/local/apache2/htdocs/index.html
</IfModule>
PHPを使う(mod_php)
PHPをインストールする
phpをbuildするのに必要なパッケージをインストール
$ yum install gcc
$ yum install perl
$ yum install libxml2
$ yum install libxml2-devel
PHPをダウンロードしてソースからインストール
$ wget http://jp1.php.net/get/php-5.6.6.tar.bz2/from/this/mirror
$ mv mirror php-5.6.6.tar.bz2
$ tar xvf php-5.6.6.tar.bz2
ソースをシステムに合わせて設定する
#
$ cd /home/vagrant/src/php-5.6.6
## 設定する
# apxsを指定
# 日本語を処理できるように指定
$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-iconv --enable-mbstring
# コンパイル、インストール
$ su
$ make
$ make install
http.conf:.phpファイルがmod_phpを使用するようにする設定
vi /usr/local/apache2/conf/httpd.conf
# SetHandler: ハンドラをセットする
# application/x-http-php :mod_phpを利用するハンドラ
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
apacheを再起動して設定を反映させる
#
$ /usr/local/apache2/bin/apachectl restart
http://example.com/now.php にアクセスする
http.conf:.phpファイルをソースコードのまま表示する場合の設定
# SetHandler: ハンドラをセットする
# application/x-http-php-source :ソースコードのまま表示する
<FilesMatch \.phps$>
SetHandler application/x-httpd-php-source
</FilesMatch>
PHPの動作を試す
$ vi /usr/local/apache2/htdocs/now.php
<html>
<head><tilte>PHP Test</title></head>
<body>
<p><?php echo date('D, d M Y H:i:s T',time()); ?>
</p>
</body>
</html>
Warnigが出たら、
$ cp /usr/share/zoneinfo/Japan localtime
動的なコンテンツをキャッシュする(mod_cache)
PHPのように動的にページを生成していながらも繰り返し表示が必要な場合がある場合、ページの内容をキャッシュして保存しておく。アクセスされた時にクライアントにキャッシュの内容を表示することで高速化する。
mod_cache
コンテンツのキャッシュを生成することができる
mod_disk_cache
生成されたキャッシュをディスクに保存して管理できる
モジュールを追加する
$ cd ~/src/httpd-2.2.27/modules/cache/
$ /usr/local/apache2/bin/apxs -cia mod_cache.c cache_storage.c cache_util.c mod_mem_cache.c cache_cache.c cache_pqueue.c cache_hash.c
$ /usr/local/apache2/bin/apxs -cia mod_disk_cache.c
# CacheEnable :方式と対象を指定してキャッシュを有効にする
# CacheRoot :キャッシュを保管するディレクトリを指定する
<IfModule mod_disk_cache.c>
CacheEnable disk /
CacheRoot "/var/cache/mod_proxy"
</IfModule>
apacheを再起動して設定を反映させる
#
$ /usr/local/apache2/bin/apachectl restart
スクリプトをキャッシュに対応させる
now.phpの先頭に以下の1行を追加する。
<?php header ('Experts: ' .gmdate('D, d M Y H:i:s T',time() + 600)); ?>
http://example.com/now.php にアクセスする
リバースプロキシを立てる(mod_proxy)
リバースプロキシとは、アクセスする側から見て目的のサーバーの手前に設置して、アクセスする際には必ず経由するようにしたプロキシサーバーのこと。
用途としては、動的コンテンツのキャッシュをリバースプロキシに保存し、必要な処理だけPHPサーバーに投げる等のパフォーマンスの改善を見込む。mod_proxy_balancerと組み合わせて複数サーバーのクライアントの処理を分散させて負荷を軽減する。等。
モジュールを追加する
$ cd /home/vagrant/src/httpd-2.2.27/modules/proxy/
$ /usr/local/apache2/bin/apxs -cia mod_proxy.c proxy_util.c
http.confを設定する
# ProxyPass:自分のパスを他のサーバーに結びつける
# ProxyPassReverse:リバースプロキシしたサーバーからレスポンスを書き換えて自分に向ける
<IfModule mod_proxy.c>
ProxyPass /app http://192.168.33.10/app
ProxyPassReverse /app http://192.168.33.10/app
</IfModule>
クライアントからアクセスする
http://example.com/app/hello.php