Apache を設定しよう

Slackware 14.1 には Apache という世界最高峰の http サーバーがインストールされています。初期状態だとまともに使うことができないので、Wordpress が動かせる程度に設定を変更してみましょう!

Apache のコアに MPM (Multi-Processing Module) というモジュールがあります。Apache をどんな風に動かすかを決定するモジュールなんですが、何故か Slackware 14.1 では event というモジュールが有効になっています。

/usr/sbin/httpd -V | grep MPM
# 実行結果
#Server MPM:     event

使用可能な MPM は event, prefork, worker の 3 種類が入ってます。

cd /usr/lib64/httpd/modules/ && \ls *mpm*
mod_mpm_event.so  mod_mpm_prefork.so  mod_mpm_worker.so

MPM は上記以外にもあるみたいです。が、Wordpress とかの PHP で書かれた Web アプリケーションを使用する場合は、prefork を使うことになっています。

MPM を含め、Apache のモジュール (特定の機能の集まり) はコンフィグファイル (/etc/httpd/httpd.conf) の LoadModule ディレクティブ (指令) で使用するか否かを決定します。早速 event MPM を prefork MPM に変更しましょう!

# mpm_event_module をコメントアウトします
#LoadModule mpm_event_module lib64/httpd/modules/mod_mpm_event.so
# mpm_prefork_module をロードします
LoadModule mpm_prefork_module lib64/httpd/modules/mod_mpm_prefork.so
# ついでにこの行をアンコメントしてもいいでしょう
Include /etc/httpd/extra/httpd-mpm.conf
# PHP を使うには、この行をアンコメントします
Include /etc/httpd/mod_php.conf

httpd-mpm.conf ファイルで MPM の細かい挙動を指定することができます。パフォーマンス・チューニングしたい際は、このファイルをインクルードしましょう。

Apache のコンフィグファイルを変更したら、apachectl コマンドでチェックし、リスタートします。モジュールのオンオフをする時はストップ&スタートすれば間違いないと思います。リスタートはサブプロセスを kill した後、親プロセスがコンフィグファイルを再読み込みします。ストップ&スタートは親プロセスも再起動します。

sudo /usr/sbin/apachectl configtest
# 実行結果
#Syntax OK
/usr/sbin/httpd -V | grep MPM
# 実行結果
#Server MPM:     prefork
# Apache をストップ&スタートします
sudo /usr/sbin/apachectl graceful-stop && sudo /usr/sbin/apachectl start

さて、実際に web アプリやなんかを動かす時は、普通バーチャルホストを使うと思います。httpd-vhosts.conf というファイルがあるので、これをインクルードするように設定しましょう。

# 下の行をアンコメントします
Include /etc/httpd/extra/httpd-vhosts.conf

それから httpd-vhosts.conf に VirtualHost コンテナを書きましょう。デフォルトで dummy-host と dummy-host2 というバーチャルホストが書いてあるので、これを参考にしましょう。なお、一番最初に書いてあるバーチャルホストがデフォルトのホストになります。つま り、存在しないホスト名 (IP アドレス直打ち含む) にリクエストが来た際は、デフォルトのホストへの要求とみなされます。セキュアにするなら、デフォルトのホストはすっからかんのディレクトリを DocumentRoot に指定し、2つ目以降のバーチャルホストに Web アプリケーション等の設定をしましょう。

# デフォルトのバーチャルホストの設定例です
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/var/www/empty"
    ServerName localhost
    <Directory "/var/www/empty">
        AllowOverride none
        # 全部 403 forbidden でいいでしょう
        Require all denied
    </Directory>
</VirtualHost>

# 2つめ以降
<VirtualHost *:80>
    ServerAdmin webmaster@slackware.web-press.net
    DocumentRoot "ひ♡み♡つ"
    ServerName slackware.web-press.net
    ServerAlias www.slackware.web-press.net
    ErrorLog "ひ♡み♡つ"
    CustomLog "ひ♡み♡つ" combined
    <Directory ひ♡み♡つ>
        DirectoryIndex index.php
        AllowOverride all
        Require all granted
    </Directory>
    <Directory ひ♡み♡つ/wp-admin>
        Satisfy any
        Order deny,allow
        Deny from all
        Allow from ひ♡み♡つ 127.0.0.1
    </Directory>
    <Files wp-login.php>
        Satisfy any
        Order deny,allow
        Deny from all
        Allow from ひ♡み♡つ 127.0.0.1
    </Files>
</VirtualHost>

※上の /wp-admin と /wp-login.php 、どっからでもアクセスできちゃいます…。

--- httpd-vhosts.conf.a    2014-01-20 08:57:29.258542680 +0900
+++ httpd-vhosts.conf   2014-01-20 08:57:31.927542680 +0900
@@ -41,18 +41,12 @@
         AllowOverride all
         Require all granted
     </Directory>
-    <Directory ひ♡み♡つ/wp-admin>
-        Satisfy any
-        Order deny,allow
-        Deny from all
-        Allow from ひ♡み♡つ 127.0.0.1
-    </Directory>
-    <Files wp-login.php>
-        Satisfy any
-        Order deny,allow
-        Deny from all
-        Allow from ひ♡み♡つ 127.0.0.1
-    </Files>
+    <Location /wp-admin>
+        Require ip ひ♡み♡つ 127.0.0.1
+    </Location>
+    <Location /wp-login.php>
+        Require ip ひ♡み♡つ 127.0.0.1
+    </Location>

     # Ensure we can run (fast)cgi scripts
     ScriptAlias /munin-cgi/munin-cgi-graph /usr/local/munin/www/cgi/munin-cgi-graph

設定したら、コンフィグファイルをチェックしてリスタートします。

sudo /usr/sbin/apachectl configtest
# 実行結果
#Syntax OK
sudo /usr/sbin/apachectl graceful

バーチャルホストを追加したら、ログローテートの設定も忘れずに行いましょう。/etc/logrotate.d/httpd を編集します。

# デフォルトでは /var/log/httpd ディレクトリ内のログだけをローテートします
#/var/log/httpd/*_log {
# /var/www/sites 以下に hoge だの piyo だのといったホスト用のディレクトリを
# 設置し、それらの中の log ディレクトリに access_log, error_log といった
# そのホスト専用のログファイルがある、という想定です。
/var/log/httpd/*_log /var/www/sites/*/log/*_log {
  # なんやかんや
}

日本語に優しい設定にしましょう。mod_negotiation を有効にし、httpd-languages.conf をインクルードします。これもコンフィグファイルの該当の行をアンコメントするだけです。httpd-languages.conf は下のように設定します。

DefaultLanguage ja
# ja を先頭にします
LanguagePriority ja en 以下省略
# 他はいじりません

WordPress でプリティ URL を使うには mod_rewrite が必要ですが、これも httpd.conf の該当の行をアンコメントするだけです。

(コウヅ)

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中