Apache 2.4 and Tomcat 8.0 - Installing on Windows 7

# 概要

Windows7に開発環境としてApache 2.4とtomcat 8.0をインストールしmod_proxy_ajpによる連携の設定を行います。


**環境**

下記の環境で動作確認を行いました。

* Windows7 (64bit)
* Apache 2.4.16 (VC11)
* Tomcat 8.0.26

**参考**

下記のサイトを参考にさせて頂きました。

* [Welcome! - The Apache HTTP Server Project] (http://httpd.apache.org/)
* [Apache Tomcat] (http://tomcat.apache.org/)


## インストール

### ランタイムのインストール

[Visual Studio 2012 更新プログラム 4 の Visual C++ 再頒布可能パッケージ] (http://www.microsoft.com/ja-jp/download/details.aspx?id=30679)より、Apacheの実行に必要なランタイムを取得してインストールします。

ファイル名: `vcredist_x64.exe`

ダウンロードしたインストーラーを実行してインストールを行います。


### Apacheのインストール

#### ダウンロード

[ダウンロードページ] (http://httpd.apache.org/download.cgi#apache24)より、Windows版のアーカイブファイルを配布しているサイトへアクセスしアーカイブファイルをダウンロードします。
今回は[Apache Lounge] (http://www.apachelounge.com/download/)というサイトよりVC11版のApache 2.4.16 Win64をダウンロードしました。

ファイル名： `httpd-2.4.16-win64-VC11.zip`


#### インストール

ダウンロードしたアーカイブファイルをインストールしたいディレクトリで展開します。
この記事では下記の場所へ展開しました。

インストールディレクトリ: `D:\dev\apache2.4.16-win64`

次にこのインストールディレクトリを環境変数APACHE_HOMEと、binディレクトリを環境変数pathに登録します。


#### httpd.confの編集

下記(抜粋)の箇所を編集します。

```text:httpd.conf(抜粋)
#ServerRoot "c:/Apache24"
ServerRoot "d:/dev/apache2.4.16-win64"

ServerName localhost:80

#DocumentRoot "c:/Apache24/htdocs"
DocumentRoot "d:/dev/apache2.4.16-win64/htdocs"

#<Directory "c:/Apache24/htdocs">
<Directory "d:/dev/apache2.4.16-win64/htdocs">

    #ScriptAlias /cgi-bin/ "c:/Apache24/cgi-bin/"
    ScriptAlias /cgi-bin/ "d:/dev/apache2.4.16-win64/cgi-bin"

#<Directory "c:/Apache24/cgi-bin">
<Directory "d:/dev/apache2.4.16-win64/cgi-bin">

# Various default settings
Include conf/extra/httpd-default.conf
```

httpd.confの構文チェックを行います。"Syntax OK"と出れば問題ありません。

```bat
> httpd.exe -t
Syntax OK
```

#### バージョンの確認

```bat
> httpd.exe -v
Server version: Apache/2.4.16 (Win64)
Apache Lounge VC11 Server built:   Jul 12 2015 12:01:56
```

```bat
> httpd.exe -V
Server version: Apache/2.4.16 (Win64)
Apache Lounge VC11 Server built:   Jul 12 2015 12:01:56
Server's Module Magic Number: 20120211:47
Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture:   64-bit
Server MPM:     WinNT
  threaded:     yes (fixed thread count)
    forked:     no
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses disabled)
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/apache"
 -D SUEXEC_BIN="/apache/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -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"
```

#### サービスのインストール

コマンドプロンプトを管理者モードで起動し下記のコマンドを実行します。

サービス名: `apache2.4`

```bat
> httpd.exe -f D:\dev\apache2.4.16-win64\conf\httpd.conf -k install -n apache2.4
Installing the 'apache2.4' service
The 'apache2.4' service is successfully installed.
Testing httpd.conf....
Errors reported here must be corrected before the service can be started.
```

**起動**

```bat
> httpd.exe -k start -n apache2.4
```

起動時にエラーメッセージが表示されなければ下記のURLにアクセスし"It works!"と表示されることを確認します。

http://localhost/

**停止**

```bat
> httpd.exe -k stop -n apache2.4
The 'apache2.4' service is stopping.
The 'apache2.4' service has stopped.
```

**アンインストール**

```bat
> httpd.exe -k uninstall -n apache2.4
```

**netコマンド**

Windowsサービスとしてインストールした後はnetコマンドで起動、停止を行うことができます。

```bat
> net start apache2.4
apache2.4 サービスを開始します.
apache2.4 サービスは正常に開始されました。
```

```bat
> net stop apache2.4
apache2.4 サービスを停止中です.
apache2.4 サービスは正常に停止されました。
```

### Tomcatのインストール

#### ダウンロード

ダウンロードページよりアーカイブファイルを取得しインストールします。

ファイル名: `apache-tomcat-8.0.26-windows-x64.zip`

#### インストール

ダウンロードしたアーカイブファイルをインストールしたいディレクトリで展開します。
この記事では下記の場所へ展開しました。

インストールディレクトリ: `D:\dev\apache-tomcat-8.0.26`

次にこのディレクトリを環境変数CATALINA_HOMEと、binディレクトリを環境変数pathに登録します。

**configtest**

```bat
> configtest.bat
```

**起動**

```bat
> catalina.bat start
Using CATALINA_BASE:   "D:\dev\apache-tomcat-8.0.26"
Using CATALINA_HOME:   "D:\dev\apache-tomcat-8.0.26"
Using CATALINA_TMPDIR: "D:\dev\apache-tomcat-8.0.26\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.8.0_60"
Using CLASSPATH:       "D:\dev\apache-tomcat-8.0.26\bin\bootstrap.jar;D:\dev\apache-tomcat-8.0.26\bin\tomcat-juli.jar"
```

起動時にエラーメッセージが表示されなければ下記のURLにアクセスし"If you're seeing this, you've successfully installed Tomcat. Congratulations!"というメッセージが書かれたページが表示されることを確認します。

http://localhost:8080/


**停止**

```bat
> catalina.bat stop
Using CATALINA_BASE:   "D:\dev\apache-tomcat-8.0.26"
Using CATALINA_HOME:   "D:\dev\apache-tomcat-8.0.26"
Using CATALINA_TMPDIR: "D:\dev\apache-tomcat-8.0.26\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.8.0_60"
Using CLASSPATH:       "D:\dev\apache-tomcat-8.0.26\bin\bootstrap.jar;D:\dev\apache-tomcat-8.0.26\bin\tomcat-juli.jar"
```

#### Webアプリケーションマネージャ

Webアプリケーションマネージャを有効にします。

**tomcat-users.xml**

conf/tomcat-users.xmlのtomcat-users要素に下記の行を追加します。

```xml:tomcat-users.xml
<tomcat-users ...>
  ...省略...

  <role rolename="manager-gui"/>
  <user username="admin" password="adminpass" roles="manager-gui"/>
</tomcat-users>
```

tomcatを再起動した後に下記のURLにアクセスするとアカウント/パスワードの入力を求められるので上記で設定したアカウントでログインします。

http://localhost:8080/manager/html


#### SSL

keystoreファイルを保存するディレクトリを作成します。

ディレクトリ: `%TOMCAT_HOME%/conf/keystore`

keystoreファイルの作成にはJDK付属のkeytool.exeを使用します。

```bat
> where keytool
C:\Program Files\Java\jdk1.8.0_60\bin\keytool.exe
```

下記のコマンドを実行してkeystoreファイルを作成します。
いろいろ入力項目がありますが開発用なのですべてRETURNキーを押して進めます。

```text
> keytool.exe -genkey -alias tomcat-example -keyalg RSA -keystore D:\dev\apache-tomcat-8.0.26\conf\keystore\keystore.jks
キーストアのパスワードを入力してください: password
新規パスワードを再入力してください: password
姓名は何ですか。
  [Unknown] : {RETURN}
組織単位名は何ですか。
  [Unknown] : {RETURN}
組織名は何ですか。
  [Unknown] : {RETURN}
都市名または地域名は何ですか。
  [Unknown] : {RETURN}
都道府県名または州名は何ですか。
  [Unknown] : {RETURN}
この単位に該当する2文字の国コードは何ですか。
  [Unknown] : {RETURN}
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknownでよろしいですか。
  [いいえ] :  Y
<tomcat-example>の鍵パスワードを入力してください
        (キーストアのパスワードと同じ場合はRETURNを押してください): {RETURN}
新規パスワードを再入力してください: {RETURN}
```

keystoreファイルの内容を確認するには下記のコマンドを使用します。もっと詳しく見たい場合は-vオプションを追加します。

```bat
> keytool.exe -v -list -keystore D:\dev\apache-tomcat-8.0.26\conf\keystore\keystore.jks
キーストアのパスワードを入力してください:

キーストアのタイプ: JKS
キーストア・プロバイダ: SUN

キーストアには1エントリが含まれます

tomcat-example,2015/09/21, PrivateKeyEntry,
証明書のフィンガプリント(SHA1): 63:3F:F4:75:A2:EB:25:75:AE:6A:C2:44:B8:3F:84:5C:C5:35:F9:53
```

**server.xml**

conf/server.xmlファイルを編集します。

```xml:server.xml
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" keystoreFile="d:/dev/apache-tomcat-8.0.26/conf/keystore/keystore.jks" keystorePass="password" keyAlias="tomcat-example" />
```

tomcatを再起動した後に下記のURLにアクセスしてページが表示されることを確認します。

https://localhost:8443/



## バーチャルホスト

バーチャルホスト名: `dummy.localhost.localdomain`

**hosts**

hostsファイルに下記の行を追加します。

```text
127.0.0.1 dummy.localhost.localdomain
```

**httpd-vhosts.conf**

conf/extra/httpd-vhosts.confを編集します。

```text:httpd-vhosts.conf
<VirtualHost *:80>
    ServerAdmin webmaster@dummy.localhost.localdomain
    DocumentRoot "d:/dev/apache2.4.16-win64/docs/dummy.localhost.localdomain"
    ServerName dummy.localhost.localdomain
    ErrorLog "logs/dummy.localhost.localdomain-error.log"
    CustomLog "logs/dummy.localhost.localdomain-access.log" common

    <Directory "d:/dev/apache2.4.16-win64/docs/dummy.localhost.localdomain">
      Options Indexes FollowSymLinks
      AllowOverride None
      Require all granted
    </Directory>
</VirtualHost>
```

**httpd.conf**

下記の行を有効にします。

```text
Include conf/extra/httpd-vhosts.conf
```

**ドキュメントルート**

ドキュメントルートのディレクトリを作成します。

ディレクトリ: `%APACHE_HOME%/docs/dummy.localhost.localdomain`

確認用のhtmlファイルを作成します。

```html:index.html
<html><body><h1>dummy-host<br>It works!</h1></body></html>
```

**確認**

下記のURLにアクセスしてindex.htmlが表示されることを確認します。

http://dummy.localhost.localdomain/



## apacheとtomcatの連携

mod_proxy_ajpモジュールを使用してapacheとtomcatの連携を行います。
今回は確認用にtomcatのexamplesページを使用します。

### Apache側の設定

**httpd-proxy-ajp.conf**

conf/extra/httpd-proxy-ajp.confファイルを作成します。

```text:httpd-proxy-ajp.conf
<Location /examples/ >
  ProxyPass ajp://localhost:8009/examples/
  Order allow,deny
  Allow from all
</Location>
```

**httpd.conf**

下記の2行を有効にします。

```text:httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
```

下記の行を追加します。

```text
# mod_proxy_ajp settings
Include conf/extra/httpd-proxy-ajp.conf
```

構文チェックを行います。

```bat
> httpd.exe -t
Syntax OK
```

### Tomcat側の設定

デフォルトの状態では設定の必要はないと思いますが念のため下記の点を確認します。

**server.xml**

conf/server.xmlファイルの下記の行が有効になっていることを確認します。

```xml
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
```