Apache:インストール(httpd)、初期設定、その他

  • 55
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

構築環境

仮想環境:CentOS6.4
http://qiita.com/YasuyukiKawai/items/230af96c42d594cd1ef0

Apacheのインストール

ソース取得してインストール

$ yum install wget
$ yum install zlib zlib-devel 
$ mkdir ~/src
$ wget http://ftp.riken.jp/net/apache/httpd/httpd-2.2.27.tar.gz
$ tar zxvf httpd-2.2.27.tar.gz
$ cd httpd-2.2.27
$ ./configure --enable-suexec --with-suexec-docroot=home
# make:設定に基づいて一連の処理を実行する
$ make 
$ make install

Apacheを起動・再起動

$ /usr/local/apache2/bin/apachectl start
$ /usr/local/apache2/bin/apachectl restart

設定ファイルのバックアップをとる

$ cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.org 

httpd.confについて

httpd(HyperText Transfer Protocol Daemon)とは

主にUNIX系OSのWebサーバソフトでよく見られる実行ファイル名およびコマンド名。

メモリ上に留まって要求に応じて動作する常駐プログラム(デーモン)の一種で、外部からのHTTP接続を受け付けて要求されたファイルを送信したり、送られたデータを受け取って保存したり、指定されたプログラムを起動したりする。
様々なWebサーバが実行ファイル名としてhttpdという名称を採用しており、同じhttpdプログラムでもそれぞれ仕様や機能が異なる。

設定方法は2種類ある。

  • apache全体の設定
  • 範囲指定した設定(ディレクトリ、ファイル、パス単位等)

範囲指定はセクションコンテナで行い、セクションコンテナ外の設定がapache全体の設定となる。

下記の<Directory "/usr/local/apache2/htdocs">~</Directory>の範囲がセクションコンテナとなる。

httpd.conf
 # ディレクトリ単位で指定    -- <Directory>
 # ファイル単位で指定      -- <Files>
 # パス単位で指定            -- <Location>
 # 他の設定ファイルを読み込む -- Include
<Directory "/usr/local/apache2/htdocs"> 
    # 設定内容
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

初期設定をする(サーバー情報の設定)

設定ファイルを確認する

$ less /usr/local/apache2/conf/httpd.conf

ポート番号の確認

httpd.conf
Listen 80

管理者のメールアドレスを指定する

httpd.conf
ServerAdmin root@localhost

サーバーの名前の情報(ホスト名)を設定する

httpd.conf
ServerName www.example.com:80

ServerNameを有効にする

httpd.conf
UseCanonicalName On

HTMLファイルを作成してページを見る

HTMLファイル置き場を確認する。(DocumentRoot)

$ less /usr/local/apache2/conf/httpd.conf
httpd.conf
DocumentRoot "/usr/local/apache2/htdocs"

HTMLファイルを作成する

htmlファイルを作成

$ cd  /usr/local/apache2/htdocs
$ vi index.html

以下のテキストを入力し保存

index.html
<html>
    <head>
        <title>Test Page</title>
    </head>
    <body>
        <p>This is a test.</p>
    </body>
</html>

設定を反映させる(Apacheを再起動する)

再起動コマンド

$ /usr/local/apache2/bin/apachectl restart

クライアントからアクセスする

下記にアクセスして、Test Pageが表示されれば成功。
http://192.168.33.10/
http://example.com

アクセス記録(ログファイル)を確認する

ログファイルは1リクエスト1行で記録され、以下のような情報で構成される。

  • アクセス元(クライアントIP、ホスト名等)

  • 認証情報(認証したユーザー名)

  • アクセス日時

  • リクエスト(リクエストの内容)

  • ステータスコード(リクエストに対するサーバの応答。200,404等)

  • バイト数(応答時に転送された情報のバイト数)

ログファイルの場所を確認する

$ less /usr/local/apache2/conf/httpd.conf
httpd.conf
# ErrorLog logs:エラーログのファイルを指定する
ErrorLog logs/error_log
# LogLevel:ログレベルを設定する 
LogLevel warn           
# LogFormat:アクセスログの書式を設定
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
# CustomLog logs:アクセスログの舐めと書式を設定する
CustomLog logs/access_log combined

アクセスログを確認する

$ less /usr/local/apache2/logs/access_log
# アクセス元のIPアドレス: 192.168.33.1
# アクセス日時: [12/Mar/2015:08:04:32 +0000]
# リクエスト:"GET / HTTP/1.1"
# ステータスコード: 200
# バイト数: 101
# リクエストの内容: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36"
192.168.33.1 - - [12/Mar/2015:08:04:32 +0000] "GET / HTTP/1.1" 200 101 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36"

/usr/local/apache2/logs/access_log (END) 

エラーログを確認する

$ less /usr/local/apache2/logs/error_log

1件につき1行、時間順に表示される。

[Thu Mar 12 08:04:33 2015] [error] [client 192.168.33.1] File does not exist: /usr/local/apache2/htdocs/favicon.ico

インデックスファイルを設定する(DirectoryIndex,Indexes)

WebページのURLには、ファイル名を指定したものと、ディレクトリ名までしか指定していないものがある。ディレクトリ名までの指定では、あらかじめ設定されたファイルが表示される。
このWebページのことを「インデックスページ」と呼ぶ。

index.htmlがインデックスファイルに使われていないことを確認する

ドキュメントルートのディレクトリに移動

$ cd /usr/local/apache2/htdocs/ 

「test」ディレクトリの作成し、「index.html」をコピーする。

$ mkdir test
$ cp index.html test/index.htm #名前を「index.htm」に変更する

http://192.168.33.10/test/ もしくはhttp://example.com/test/ のリンクに飛ぶと、index.htmの内容の代わりにファイルの一覧が表示される。

Index_of__test.png

インデックスのファイルの名前を追加する

$ vi /usr/local/apache2/conf/httpd.conf
DirectoryIndex : urlがディレクトリを指しているときに返すファイルを指定する

先頭にファイル名の先頭に「index.htm」を追加する。
左側にあるファイルが優先される。

httpd.conf(デフォルト)
DirectoryIndex index.html
httpd.conf(追加後)
DirectoryIndex index.htm index.html

ファイル一覧を表示しないようにする

DocumentRootディレクトリ("/usr/local/apache2/htdocs")のセクションコンテナを確認する。設定はセクションコンテナ単位で管理されている。

OptionsのIndexesを削除する

httpd.conf(デフォルト)
<Directory "/usr/local/apache2/htdocs">
   # Options:ディレクトリの設定
   # Indexes:ファイル一覧を表示するOption指定
    Options Indexes FollowSymLinks
   # ~
   # ~
</Directory>
httpd.conf(削除後)
<Directory "/usr/local/apache2/htdocs">
   # Options:ディレクトリの設定
   # Indexes:ファイル一覧を表示するOption指定
    Options Indexes FollowSymLinks
   # ~
   # ~
</Directory>

[Indexesを削除する理由]
Indexesはインデックスファイルが見つからない場合にファイル一覧を表示するというオプション。インデックスファイルを用意する場合はこのオプションは必要無い上に、インデックスファイルを消してしまったときに公開する意思のないファイル名が見えてしまう可能性があるため、Indexesは削除しておいたほうがよい。
インデックスファイルを作らず、ファイル一覧を表示したい場合はIndexesを有効にする

設定を有効にするためapache再起動する

$ /usr/local/apache2/bin/apachectl restart

下記のリンクでインデックスファイルの内容(Test Page)が表示されることを確認する(ファイル一覧が表示されない)。
http://192.168.33.10/test/
http://example.com/test/

DocumentRootにないファイルを見せる(Alias)

Aliasを設定しすると、DocumentRoot("usr/local/apache2/html/")にないファイルがDocumentRootにあるように見える。

$ less /usr/local/apache2/conf/httpd.conf
httpd.conf
# usr/local/apache2/html/icons/と同じ扱いができる
Alias /icons/ "/usr/local/apache2/icons/"

下記のリンクにアクセスする。
http://192.168.33.10/icons/
http://192.168.33.10/icons/apache_pb2.png
http://example.com/icons/

文字コードの設定を変更する (AddDefaultCharset)

Apacheのデフォルト文字コードはUTF-8が指定されるので、UTF-8以外の文字コードを使った日本語の場合、文字化けをするので設定を修正する必要がある

$ vi /usr/local/apache2/conf/httpd.conf
httpd.conf(デフォルト)
$ AddDefaultCharset UTF-8
httpd.conf(修正後)
# offか設定なしの場合、デフォルト文字コードが指定されない
$ AddDefaultCharset off