2011年8月5日金曜日

Amazon EC2 (Amazon Linux) での ApacheとPHP インストールと設定

ApacheとPHPをインストールして設定していきます。今回はバーチャルホストを設定してドメインを運用します。通常、単一サーバーに複数のSSLは設定できませんが、EC2の場合はElastic Load Brancerを利用することで可能になりますので、マルチドメイン対応にしておく方が応用が利くと思います。

使用したインスタンスのイメージは、『Basic 32-bit Amazon Linux AMI 2011.02.1 Beta (AMI Id: ami-300ca731)』です。

管理者権限になる

インストールと設定は管理者権限で行いますので権限を取ります。
$sudo su -

デフォルトではOS、PHPともにタイムゾーンの設定がされていませんので設定しておきます。設定は日本のタイムゾーンとします。
#cp -i /usr/share/zoneinfo/Japan /etc/localtime

ApacheとPHPのインストール

yumを使って ApacheとPHPをインストールします。この記事を書いている時点では、Apacheがバージョン2.2.16、PHPはバージョン5.3.6がインストールされました。いくつかのライブラリもあわせてインストールしました。(なお、PHP5.3.7はcrypt関数に致命的な脆弱性が報告されていますので、5.3.8を待つか、5.3.6を明示的にインストールするようにしてください。)
#yum -y install httpd php php-pear php-mysql php-mbstring php-gd php-mcrypt php-pecl-apc
php-pear
PHPから利用可能なライブラリを提供しているサービス
php-mysql
PHPからMySQLを利用するためのライブラリ
php-mbstring
マルチバイトの文字列を操作するmbstring関数を有効にする
php-gd
グラフィックスの動的生成ライブラリ
php-mcrypt
mcrypt暗号化関数を有効にする
php-pecl-apc
PHPの中間コードをキャッシュして高速化する。(任意)
php.ini はタイムゾーンの修正とあわせて、PHPのバージョンを返さない設定も行っています。
#vi /etc/php.ini
date.timezone="Asia/Tokyo"
expose_php = Off

Apacheの設定

各ドメインのドキュメントルートを「/home/domains/ドメイン名/public_html/」とします。今回はサイト管理のユーザーwebadmin(この記事を参照)が作成されている前提で、ディレクトリの所有権を与えています。
#cd /home/domains
#mkdir www.dummydomain.com
#mkdir www.dummydomain.com/public_html
#chown -R webadmin:webadmin www.dummydomain.com
#chmod 755 /home/domains

Apacheの設定ファイルを編集します。
#cd /etc/httpd/conf
#vi httpd.conf
修正
ServerTokens ProductOnly
クライアントに送るサーバー情報を最小限にする。
修正
ServerAdmin root@dummydomain.com
問合わせ先のメールアドレスを設定する。
修正
UseCanonicalName On
OnにするとPHPの環境変数$_SERVER['SERVER_NAME']にサーバー名が返されるようになる。
追加
LogFormat "%t %v %h %l %u \"%r\" %>s %b \"%{Referer}i -> %U\" \"%{User-Agent}i\"" custom
ログのフォーマットをカスタマイズする。多めに取得しているので不要な値は取り除いてかまいません。

%t: 時刻
%v: ServerName
%h: リモートホスト
%l: リモートログ名(未設定時は-)
%u: リモートユーザー(認証による)
%r: リクエストの最初の行
%>s: 最終ステータスコード(リダイレクトコードではなく、最終のコードをとるため)
%b: HTTPヘッダーを除くバイト数。0の場合は-。
%U: リクエストURL
%{Referer}i: リクエストデータに含まれるリファラー
%{User-Agent}i: リクエストデータに含まれるユーザーエージェント
修正
CustomLog logs/access_log custom env=!nolog
ログ形式を前述のcustomに設定。ログを記録しないパターンを設定(後述)。その他のCustomLogはコメントアウトにする。
追加
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)|(js)$" nolog
SetEnvIf Request_URI "favicon\.ico" nolog
どういった場合にログを記録しないかを設定する。ここではファビコンと画像のログは取得しないようにしている。(ログサイズが大きくなるのを防ぐため)
修正
ServerSignature Off
エラーメッセージの表示画面でフッターに情報を付加しない。
追加
TraceEnable Off
HTTP TRACEメソッドを無効にする。

バーチャルホストの設定ファイルを作成します。httpd.conf で /etc/httpd/conf.d/ ディレクトリにある拡張子.conf ファイルを自動的に読み込むように記述がされていますので、conf.d/virtualhost.conf として作成します。
#vi /etc/httpd/conf.d/virtualhost.conf

以下設定内容です。運用するドメイン分<VirtualHost>~</VirtualHost>を記述します。(ElasticIPを割り当てていてもローカルIPが使われるようなので、*ではなくIPを指定する場合はローカールIPを記述します。)
NameVirtualHost *:80

<VirtualHost *:80>
    ServerName www.dummydomain.com:80
    DocumentRoot /home/domains/www.dummydomain.com/public_html/
    ServerAdmin admin@dummydomain.com

    <Directory "/home/domains/www.dummydomain.com/public_html">
        Options FollowSymLinks ExecCGI
        AllowOverride all
        Order Allow,Deny
        Allow from all
    </Directory>
</VirtualHost>

Apacheのバージョンによって「client denied by server configuration」が出る場合は、
Order Allow,Deny
Allow from all
ではなく、
Require all granted
とします。

Apacheの起動と自動起動設定

Apacheを起動します。自動起動のための設定もあわせておこないます。
#service httpd start
#chkconfig httpd on



Related Posts Plugin for WordPress, Blogger...