proxyやsslのモジュールを使ってみる:仕事で使える魔法のLAMP(16)
今回は、Apache HTTP Serverに追加モジュールを組み合わせてビルドしてみます。失敗したときの対策も紹介します(編集部)
allを指定すればすべて入るはず?
前回はApache HTTP Server(以下Apache)のビルドをするときに、必要なライブラリが存在しないためにビルドが失敗するというトラブルを解決しました。ビルドが失敗する理由としては、ライブラリなどの外部ソフトウェアの欠如というのが、最も典型的です。つまり、前回までの内容で、大部分の問題に対処できる基本を押さえることができたはずです。
しかし、前回までに紹介した解決法を試みても失敗するときは、かなり根が深い問題である可能性が高いです。そのときは、ビルド対象のソフトウェアやその背景などのさらなる知識が必要になります。今回からしばらくは、Apacheとその周辺ソフトウェアについて解説していきます。
今回はApacheのモジュールについて、より詳しく解説します。Apacheではconfigureスクリプトの引数を変えることで、ビルドするモジュールを選べます。しかし、前回のようにallと指定しても、実際にはビルド対象にならないモジュールがいくつかあるのです。その中には使用頻度が高いモジュールがいくつかありますので、そういったモジュールについて取り上げます。
allと指定してもビルド対象にならないモジュールについては、ApacheのWebサイト上にあるconfigureのドキュメントを読むと分かります。それによると、次のように指定するとすべてのモジュールをビルドできるようです。
--enable-mods-shared="all ssl ldap cache proxy authn_alias mem_cache file_cache authnz_ldap charset_lite dav_lock disk_cache"
このように「--enable-mods-shared」はallキーワードに加えてモジュール名を列挙して使うこともできます。allに続いて指定しているモジュール名が、all指定ではビルド対象にならないモジュールということになります。
これらのモジュールのなかで、最も良く使うと考えられるのはsslです。その名の通り、SSL対応のWebサーバを構築するために使います。proxyはApacheをプロキシにするために使います。リバースプロキシにするときにも使えます。ldap、authnz_ldapは、LDAPサーバを使った認証のためのモジュールです。この3つが比較的利用頻度が高いモジュールだと思います。以降、これらのモジュールのビルド方法を解説していきます。
proxyモジュールをビルド
proxyモジュールは引数を指定するだけでビルドできます。前回までのconfigureスクリプトの引数に追加すると次のようになります。
./configure \ --prefix=/opt/apache-httpd-2.2.19 \ --enable-mods-shared=all \ --enable-proxy \ --with-mpm=prefork \ 2>&1 | tee configure_log.txt
「--enable-mods-shared="all proxy"」という指定ではなく、「--enable-proxy」としているのは、行単位になるため、切り貼りがしやすいためです。実際には好きな方を使うとよいでしょう。proxyモジュールは、依存する外部ソフトウェアもありませんので、これで問題なくビルドできるはずです。
OpenSSLを追加してsslモジュールをビルド
次は、sslモジュールです。「--enable-ssl」を追加して実行します。
./configure \ --prefix=/opt/apache-httpd-2.2.19 \ --enable-mods-shared=all \ --enable-ssl \ --with-mpm=prefork \ 2>&1 | tee configure_log.txt
実行してみると、本連載で利用しているさくらインターネットのVPSに作ったCentOS環境では、次の部分でエラーになりconfigureの実行が止まります。
checking whether to enable mod_ssl... checking dependencies checking for SSL/TLS toolkit base... none checking for OpenSSL version... checking openssl/opensslv.h usability... no checking openssl/opensslv.h presence... no checking for openssl/opensslv.h... no checking openssl/ssl.h usability... no checking openssl/ssl.h presence... no checking for openssl/ssl.h... no no OpenSSL headers found checking for SSL-C version... checking sslc.h usability... no checking sslc.h presence... no checking for sslc.h... no no SSL-C headers found configure: error: ...No recognized SSL/TLS toolkit detected
SSL/TLS toolkitが存在しないというメッセージが出ています。外部ソフトウェアの不足による失敗です。これなら、前回に説明した方法で解決できます。
ただし、前回に説明した例とは少し違うところがあります、SSL/TLS toolkitというものが1つではないのです。configure実行中の表示でも、OpenSSLとSSL-Cの2つをチェックしていることが分かります。また、ヘルプ表示を見ると、次のように2つのwith引数があります。
--with-sslc=DIR RSA SSL-C SSL/TLS toolkit --with-ssl=DIR OpenSSL SSL/TLS toolkit
sslモジュールをビルドするには、SSL/TLS toolkitとしてこのどちらかが必要ということです。インターネットで検索してみると分かりますが、RSA SSL-Cは商用の製品です。今回は、OpenSSLを使いましょう。
前回同様に、yumコマンドで検索します。すると、openssl-develパッケージをインストールすればよいということが分かります。
$ sudo yum install openssl-devel
configureを実行するときは、引数に「--with-ssl」を追加します。すると、次のようになります。
./configure \ --prefix=/opt/apache-httpd-2.2.19 \ --enable-mods-shared=all \ --enable-ssl \ --with-ssl \ --with-mpm=prefork \ 2>&1 | tee configure_log.txt
これでsslモジュールを含めてビルドできるようになったはずです。
OpenSSLはパッケージで使うか、ビルドすべきか
上記の例では、OpenSSLのパッケージをインストールしました。もちろん、独自にソースコードからビルドする方が良い場合もあります。LinuxのディストリビューションであればOpenSSLは入っているはずですので、パッケージを使うことができます。ただ、パッケージを使うと、ディストリビューションのサポート期間が終わった後、セキュリティアップデートが期待できないという問題があります。
OpenSSLはSSL対応のWebサイトの構築を可能にするなど、セキュリティ対策を考えると、非常に重要なソフトウェアです。古いディストリビューションを使わざる得ないなど、アップデートが期待できない状況であれば、独自に最新のOpenSSLをビルドして使うべきです。同じような問題は、OpenSSLに限らず、他のソフトウェアでもありえる問題ですが、特にOpenSSLでは大きな問題になります。
非公式のパッケージを利用するという手もあります。古いディストリビューションに合わせて、最新のパッケージを作って公開している組織や個人があります。そういったところからパッケージを入手して使うということです。しかし、非公式のものがどこまで信頼できるかという問題があります。筆者としてはビルドすることをお勧めします。
きちんとアップデートの提供を受けられるディストリビューションを使っていれば、非公式のパッケージを使う必要などありません。OpenSSLをビルドしなければならないケースは多くはないと思いますが、OpenSSLはconfigureを採用していないソフトウェアの1つでもあり、ビルドする方法を覚えておいても損はないソフトウェアです。というわけで、次回はOpenSSLをビルドして利用する方法を紹介します。
- CMakeでMySQLをビルドしてみる
- MySQLのビルドに欠かせないCMakeを準備する
- いよいよMySQL編、ソースからビルドすべきか?
- PHPでセッションを利用するための設定
- クライアントがアクセスできる範囲を制限する
- エラーメッセージをどう扱うか?
- ファイルのアップロードを制限する
- リクエストデータを受け取る変数の扱い
- マジッククオート機能には頼らない
- 安全を考えてPHPの実行時設定を調整する
- Apacheの設定ファイルでPHPの設定を変える
- PHPの設定ファイルを作って配置してみる
- PHPスクリプトを実行できるようにする準備
- PHPエクステンション組み込みの仕上げ
- 単純なデータを管理するDBMを使えるようにする
- エクステンションの組み込み状況を確認する
- PHPでデータベースを使う準備をする
- XMLを処理できるようにする
- エクステンションを有効にしてビルドに挑戦!
- PHPテスト失敗の原因を追究する
- 早速PHPをビルド! そしてテスト!
- PHP編に突入! まずはソースをダウンロード
- 設定ファイルを作成してApacheを動作させる
- 設定ファイルや公開ドキュメントの配置を考える
- 1つのサーバに複数の仮想サーバ?
- Apacheの設定ファイルを記述する前に
- サードパーティのApacheモジュールをビルドする
- 認証DBにアクセスするライブラリを組み込む
- Apache同梱ソフトウェアに引数を渡してビルド
- OpenSSLをビルドしてApacheで利用する
- proxyやsslのモジュールを使ってみる
- ライブラリが足りなくてビルドできないときは?
- Apache HTTP Serverのビルドを始めよう
- configureでソフトウェア固有の設定を変更してみる
- configureの設定を変更してみる
- 配布パッケージの中身と、configureの役目を知る
- ダウンロードファイルが真正なものであるかを確認
- Makefileをいろいろ書き換えながらビルドしてみよう
- makeを使ってソフトウェアをビルドしてみよう
- ダイナミックリンクとスタティックリンク
- 「ビルド」という作業は何を指しているのか
- 公開鍵認証でsshを安全に使う
- sshを便利にする公開鍵暗号
- アクセス制限の設定とCentOSのアップデート
- サーバに接続して、一般ユーザーのアカウントを作る
- LAMP環境、自分で作りませんか?
Copyright © ITmedia, Inc. All Rights Reserved.