momoto.github.io

YumをつかってApache HTTP Server 2.2をインストールする

 パッケージ管理システムのYumをつかって、Apache HTTP Server 2.2.15をインストールします。OSはCentOS 6を使用しています。

 RHEL 6互換のCentOSの標準リポジトリではhttpdパッケージでApache HTTP Serverが提供されています。パッケージの情報はyum info <パッケージ名>で調べることができます。 パッケージ情報が示すとおり、httpdパッケージ(i686)からインストールできるApacheのバージョンは2.2.15になります。

$ yum info httpd

Available Packages
Name        : httpd
Arch        : i686
Version     : 2.2.15
Release     : 29.el6.centos
Size        : 828 k
Repo        : updates
Summary     : Apache HTTP Server
URL         : http://httpd.apache.org/
License     : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
            : web server.

 インストールにはyum install <パッケージ名>を実行するだけで、パッケージ管理システムが依存関係を解決し、必要なパッケージと共にインストールが完了します。

$ sudo yum install httpd
Setting up Install Process

...

Installed:
  httpd.i686 0:2.2.15-29.el6.centos

Dependency Installed:
  apr.i686 0:1.3.9-5.el6_2                    apr-util.i686 0:1.3.9-3.el6_0.1
  apr-util-ldap.i686 0:1.3.9-3.el6_0.1        httpd-tools.i686 0:2.2.15-29.el6.centos
  mailcap.noarch 0:2.1.31-2.el6

Complete!

 httpdパッケージが提供しているファイルはrpm -ql httpdで一覧を得られますが、出力は300行以上に及ぶためディレクトリごとにファイルの役割をみてみます。

$ rpm -ql httpd | gawk -F/ '{print "/"$2"/"$3}' | uniq -c
     10 /etc/httpd
      1 /etc/logrotate.d
      2 /etc/rc.d
      2 /etc/sysconfig
     66 /usr/lib
      8 /usr/sbin
     12 /usr/share
      1 /var/cache
      1 /var/lib
      1 /var/log
      1 /var/run
    252 /var/www
(表)httpdパッケージが提供するファイルやディレクトリの概要
/etc/httpd/conf/httpd.confなど設定ファイルを格納しているディレクトリ(サーバルート)
/etc/logrotate.d/httpdhttpdのログローテーションの設定
/etc/rc.d/init.d/{htcacheclean, httpd}httpdとhtcachecleanの起動スクリプト
/etc/sysconfig/{htcacheclean, httpd}preforkかworkerの切り替え等、サービスの設定ファイル
/usr/lib/httpd/modules/mod_*.soApacheモジュールの共有ライブラリファイル
/usr/sbin/{apachectl, httpdなど}Apache各種コマンドの実行ファイル
/usr/share/{doc/, man/}Apacheのドキュメントやmanページ
/var/cache/mod_proxy/mod_disk_cacheのCacheRootディレクトリ
/var/lib/dav/mod_davのロックデータベースディレクトリ
/var/log/httpd/httpdのログを格納するディレクトリ
/var/run/httpd/httpdのプロセスIDファイルを格納するディレクトリ
/var/www/HTMLファイル等のコンテンツを格納しているディレクトリ(/var/www/htmlがデフォルトのドキュメントルート)

 httpd-2.2.15-29.el6.centos.i686では、実行ファイルのhttpd(prefork)とhttpd.workerはそれぞれ次のようにコンパイルされています。

$ /usr/sbin/httpd -V
...
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

$ /usr/sbin/httpd.worker -V
...
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/worker"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

 serviceユーティリティをつかってhttpdを起動させたあと、curlでウェブサーバの動作を確認してみます。

$ sudo service httpd start
                                                           [  OK  ]
$ curl -D - -s -o /dev/null localhost
HTTP/1.1 403 Forbidden
Date: Sun, 13 Oct 2013 09:08:07 GMT
Server: Apache/2.2.15 (CentOS)
Accept-Ranges: bytes
Content-Length: 5039
Connection: close
Content-Type: text/html; charset=UTF-8

 デフォルトの設定のままではDocumentRoot(/var/www/html)のDirectoryIndex(index.html)が見つからず、/etc/httpd/conf.d/welcome.confではOptions -Indexesが設定されているため、 HTTPステータスコードは403 Forbidden、メッセージボディには/var/www/error/noindex.htmlを応答しています。

 /var/www/html/index.htmlを作成したあとに再度リクエストしてみると200 OKを応答するようになります。

$ echo '<html><body>It works!</body></html>' | sudo tee /var/www/html/index.html
<html><body>It works!</body></html>
$ curl -D - localhost
HTTP/1.1 200 OK
Date: Sun, 13 Oct 2013 09:12:35 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Sun, 13 Oct 2013 09:12:16 GMT
ETag: "20584-24-4e8a167dd7f45"
Accept-Ranges: bytes
Content-Length: 36
Connection: close
Content-Type: text/html; charset=UTF-8

<html><body>It works!</body></html>

参考