読者です 読者をやめる 読者になる 読者になる

波打際のブログさん

主に、プログラミング備忘録など。

CentOS6.4にインストールしたApacheを設定する。

はじめに

前回(CentOS6.4にApacheをコンパイルしてインストールする - 波打ち際のブログさん)、インストールしたApacheの設定を行い、バーチャルホスト機能で複数のホストごとのサイトを用意します。


Q.なぜいきなりバーチャルホストなの!?
A.とりあえず起動した時点で普通に動いているので、細かい設定は本家ドキュメントを(キリッ
 (すみません、あまりメモしてなかったので。。。。機会があればその他の細かい設定紹介します。)

環境

  • CentOS6.4
  • Apache2.4.4

Apacheをサービスとして登録する

serviceコマンドを使って、起動と終了ができるようにするために、起動スクリプトを設定します。

起動スクリプトのコピー

前回makeを実行したディレクトリの中に起動スクリプトが含まれているので、それをinit.dにコピーします。

$ cp /usr/local/src/httpd-2.4.4/build/rpm/httpd.init /etc/rc.d/init.d/httpd

ソースコードのディレクトリ下の build/rpm/httpd.init を httpd にリネームしてコピーしています。

起動スクリプトの設定

コピーした起動スクリプトはそのままでは動作しないので編集します。
configureで特に設定せずにインストールした場合、apacheのデフォルトインストールパスは /usr/local/apache2 になっています。今回はデフォルトのインストールパスを想定して記述していきます。

apache本体のパスを修正
httpd=${HTTPD-/usr/local/apache2/bin/httpd}

60行目でapache本体のパスを修正します。

制御用スクリプトのパスを追加
apachectl=/usr/local/apache2/bin/apachectl

本体パスのすぐ下に追加しました。

pidファイルのパスを修正
pidfile=${PIDFILE-/usr/local/apache2/logs/${prog}.pid}

62行目のpidfileのパスを修正します。

設定ファイルのパスを修正
CONFFILE=/usr/local/apache2/conf/httpd.conf 

68行目の設定ファイルのパスを修正します。

起動終了

以上でserviceコマンドでapacheを制御可能です。

// 起動
$ service httpd start

// 再起動
$ service httpd restart

// 終了
$ service httpd stop

バーチャルホストの設定をする

httpd.confの修正

デフォルトではバーチャルホスト設定が読み込まれないようになっているので、読み込まれるように修正します。

# Virtual hosts
Include conf/extra/httpd-vhosts.conf  # この行がコメントアウトされています。

バーチャルホスト設定の記述

extra/httpd-vhosts.conf にバーチャルホストの設定を記述します。

<VirtualHost *:80>
    DocumentRoot "/htdocs/main"
    ServerName vm-main

    # 誰でもアクセスができるように設定
    <Directory "/htdocs/main">
        Require all granted
    </Directory>
</VirtualHost>
 
<VirtualHost *:80>
    DocumentRoot "/htdocs/virtual"
    ServerName vm-virtual
 
    # ローカルホスト以外はアクセスできないように設定
    <Directory "/htdocs/virtual">
        Require ip 127.0.0.1
        Require all denied 
    </Directory>
</VirtualHost>

apache2.4以前ではDirectoryごとのアクセス制限に Order allow,deny を使用した記述を使用していましたが、それ以降は Require を使用する記述に変更されました。(筆者はこれに引っかかって1時間くらい時間を無駄に・・・orz)

Requireの記述方法ちょいまとめ

基本

# 全て許可
Require all granted

# 全て拒否
Require all denied

# 指定したIPを許可
Require ip 127.0.0.1

# 指定したIPを拒否(※要注意、下記参照)
Require not ip 127.0.0.1

指定したIPを拒否する場合には注意が必要です。Requireは "どれかにマッチすれば許可する" という挙動なので、

<Directory "/hogehoge">
    Require not ip 127.0.0.1
    Require all granted
</Directory>

と記述しても、正常に動作しません。(おそらくconfファイルのチェックが通りません。)

もし指定したIPだけ拒否したい場合には RequireAllエレメントで囲みます。

<Directory "/hogehoge">
    <RequireAll>
        Require not ip 127.0.0.1
        Require all granted
    </RequireAll>
</Directory>

RequireAllエレメントで囲まれたブロック全ての条件が満たされた場合のみ許可されます。