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


#構築環境
仮想環境：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
```

```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行、時間順に表示される。

```error_log
[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](https://qiita-image-store.s3.amazonaws.com/0/64612/d77dcfa8-55c8-c484-235a-7e0fbd00631b.png "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
```