apacheの設定

# Webサーバ(apache)の設定ファイルを見てみる

## 実行環境
```
 [root@verify01 ~]# cat /etc/redhat-release 
 CentOS release 6.6 (Final)
 [root@verify01 ~]# uname -a
 Linux verify01 2.6.32-504.12.2.el6.x86_64 #1 SMP Wed Mar 11 22:03:14 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
 [root@verify01 ~]# httpd -version
 Server version: Apache/2.2.15 (Unix)
 Server built:   Oct 16 2014 14:48:21
```

## 設定項目を確認する

### ServerTokens
HTTPレスポンスヘッダの[server:]部分に表示される情報レベルを指定する.
指定できるパラメータは[Major|Minor|Min|Prod|OS|Full]であり,デフォルトは[OS]である.
一部のパラメータに設定し, レスポンスヘッダを確認してみる.確認方法はw3mでレスポンスヘッダのみ抽出する.
別のやり方としてはWireSharkにて見る方法もある.
以下は, w3m -dump_head [serverIP|URL]にて確認したヘッダである.

##### OS（デフォルト）
```
 HTTP/1.1 200 OK
 Date: Sat, 11 Apr 2015 11:25:44 GMT
 Server: Apache/2.2.15 (CentOS)
 Last-Modified: Sat, 11 Apr 2015 11:25:14 GMT
 ETag: "4064d-44-51371227cebe8"
 Accept-Ranges: bytes
 Content-Length: 68
 Connection: close
 Content-Type: text/html; charset=UTF-8
```

##### Prod
```
 HTTP/1.1 200 OK
 Date: Sat, 11 Apr 2015 11:29:21 GMT
 Server: Apache
 Last-Modified: Sat, 11 Apr 2015 11:25:14 GMT
 ETag: "4064d-44-51371227cebe8"
 Accept-Ranges: bytes
 Content-Length: 68
 Connection: close
 Content-Type: text/html; charset=UTF-8
```

##### Full(全ての情報が表示される)

```
 HTTP/1.1 200 OK
 Date: Sat, 11 Apr 2015 11:30:09 GMT
 Server: Apache/2.2.15 (CentOS) DAV/2
 Last-Modified: Sat, 11 Apr 2015 11:25:14 GMT
 ETag: "4064d-44-51371227cebe8"
 Accept-Ranges: bytes
 Content-Length: 68
 Connection: close
 Content-Type: text/html; charset=UTF-8
```

以上の結果より,セキュリティレベル向上のためにはProdが望ましい.逆を言うと,FullやデフォルトのOSでは,
ディストリビューションやミドルウェアの詳細情報を表示してしまうため,攻撃されてしまう可能性がある.

### LogFormat/CustomLog
---

access_log/error_log等の出力形式や出力場所を指定するためのパラメータ.デフォルトのままでも良いが, 自分が意図した内容にすると解析に役立つ.

#### LogFormat
ログファイルに出力される情報のフォーマット(書式)を指定する.
デフォルトでは,以下が設定されている

```
 構文:LogFormat formatnickname [nickname]
 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
```
ただし\(バックスラッシュ)でエスケープされた文字は,そのままログに記載される
%{hogehoge}i はHTTPリクエストヘッダのhogehogeを指定している

[LogFormat nickname1 nickname2]とする場合,nickname2はnickname1を参照する.
また,フォーマット文字列はそれぞれにおいて意味を持つ.デフォルトのcombinedでは,以下のような意味を持っている.

|     フォーマット     |     意味     |
|:-------|:----------|
|%h|リモートホスト(HostnameLookupsがOFFになっている場合はIPアドレスになる)|
|%l|リモートログ名(クライアントにidentdまたは類似デーモンが起動している場合に付与される)|
|%u|HTTP認証時に認証したユーザ名|
|%t|リクエストを受け付けた時刻|
|%r|リクエストの最初の行("RequestMethod RequestURI RequestVersion")|
|%>s|サーバが最後に返した応答コード(場合によっては301などによってリダイレクトされる場合があるため、どのタイミングかの考え方がある)|
|%b|レスポンスのバイト数(HTTPヘッダを除いた,bodyのみ)|
|%{Referer}i|直前に開いていたWebページのURL|
|%{User-Agent}i|ユーザのWebブラウザについての情報|

#### CustomLog
ログのファイル名と書式を指定する.デフォルトでは以下のようになっている.

```
 構文: CustomLog file|pipe format|nickname
 CustomLog logs/access_log combined
```
この構文を解析するには,[ServerRoot]が関係してくる.デフォルトでは以下のような設定になっている.

```
 ServerRoot "/etc/httpd"
```

ServerRootにより,httpd.confファイルに記載されているパスは,/etc/httpd配下を示している.
よって,CostomLogによりログファイルが保存される先は

```
 /etc/httpd/logs/access_log
```

となる.しかし,logsはシンボリックリンクとなっている.最終的に保存される場所を確認してみる.

```
 [root@verify01 httpd]# pwd
 /etc/httpd
 [root@verify01 httpd]# ll
 合計 8
 drwxr-xr-x. 2 root root 4096  4月 11 21:19 2015 conf
 drwxr-xr-x. 2 root root 4096  4月 11 20:13 2015 conf.d
 lrwxrwxrwx. 1 root root   19  4月 11 20:13 2015 logs -> ../../var/log/httpd
 lrwxrwxrwx. 1 root root   29  4月 11 20:13 2015 modules -> ../../usr/lib64/httpd/modules
 lrwxrwxrwx. 1 root root   19  4月 11 20:13 2015 run -> ../../var/run/httpd
```

よって、アクセスログは以下に保存されている

```
 /var/log/httpd/access_log
```

### (名前ベースの)VirtualHost
---

特定のホスト名が指定されたリクエストを別の指定した処理を実施する.
指定したホスト名を持つURLでアクセスした際,他のドキュメントルートのコンテンツを表示させる際に有効な技術.
また,2つのWebサーバを1つに擬似的に集約することが可能.設定として,以下のような設定を行う.

```
  NameVirtualHost *:80
  <VirtualHost *:80>
   ServerName www.virtual1.com //待ち受ける名前
   DocumentRoot /www/virtual1
  </virtualHost>
  <VirtualHost *:80>
   ServerName www.virtual2.com
   DocumentRoot /www/virtual2
  </VirtualHost>

# www.virtual1.comでリクエストされた場合は,/www/virtual1のコンテンツを表示,
# www.virtual2.comでリクエストされた場合は,/www/virtual2のコンテンツを表示させるように設定することが可能である.
```