LoginSignup
2
4

More than 5 years have passed since last update.

Apache:モジュール(データ圧縮送信、リライト、PHP、キャッシュ、リバースプロキシ等)

Last updated at Posted at 2015-03-19

モジュールの一覧表示、追加

組み込まれているモジュールの一覧を表示する

# 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に追加する
httpd.conf
# 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
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の設定を追加する

httpd.conf
## 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
httpd.conf
<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
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
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
httpd.conf
# 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行を追加する。

now.php
    <?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

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4