CLOVER🍀

That was when it all began.

Windows版Apacheをインストールする

ちょっとした目的のエントリです。

Apache HTTP Serverは、よく使うWebサーバーだと思いますが、基本的にオフィシャルサイトでは
ソースコードが配布されているので、Linuxなどではこれをコンパイルして使うことになります。

では、Windows版は?ということですが、いくつかの選択肢があります。

自分は、このうちApache Hausで提供されているものを使っています。

Apache Haus

このエントリを書いている時点でのバージョンは、Apache 2.4.25が最新版なので、こちらを
ダウンロードします。

32bit用と64bit用があるので、OSに応じた方をダウンロードしてください。

自分の環境では、64bit用をダウンロードしました。Windows 10 64bitで確認しています。

で、こちらをCドライブ直下で展開します。今回は、次のようなパスになりました。

C:\httpd-2.4.25-x64-vc14-r1\Apache24

エクスプローラーで見ると、こんな感じ。

で、このまま起動…する前に、confディレクトリ配下にある設定ファイルを編集します。

httpd-2.4.25-x64-vc14-r1\Apache24\conf\httpd.conf

httpd.confの中に、SRVROOTという定義をした箇所があるので、こちらを実際にApacheを置いた
ディレクトリに変更しましょう。

Define SRVROOT "/Apache24"

今回は、次のように設定しました。

Define SRVROOT "/httpd-2.4.25-x64-vc14-r1/Apache24"

これで、Apacheを起動します。

C:\>cd httpd-2.4.25-x64-vc14-r1\Apache24\bin

C:\httpd-2.4.25-x64-vc14-r1\Apache24\bin>httpd

「http://localhost/」で確認。

このApacheには、自己署名証明書が入っているので、この状態でもHTTPSが使用できます。
※セキュリティ警告はありますが

「https://localhost」にアクセス。

いいですね。

ところで、このHTTPSの設定なのですが、httpd.confの中にインクルードされています。

<IfModule ssl_module>
#Include conf/extra/httpd-ssl.conf
Include conf/extra/httpd-ahssl.conf
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

実際の定義は、「conf/extra/httpd-ahssl.conf」に書いてあるようですね。

で、「conf/extra/httpd-ahssl.conf」には次の3つのVirtualHostの定義があり、この中でSSL証明書の
設定を書いています。

<VirtualHost _default_:443>
  SSLEngine on
  ServerName localhost:443
  SSLCertificateFile "${SRVROOT}/conf/ssl/server.crt"
  SSLCertificateKeyFile "${SRVROOT}/conf/ssl/server.key"
  DocumentRoot "${SRVROOT}/htdocs"
# DocumentRoot access handled globally in httpd.conf
	CustomLog "${SRVROOT}/logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
	<Directory "${SRVROOT}/htdocs">
		Options Indexes Includes FollowSymLinks
		AllowOverride AuthConfig Limit FileInfo
    Require all granted
	</Directory>
</virtualhost>

<VirtualHost *:443>
  SSLEngine on
  ServerName serverone.tld:443
  SSLCertificateFile "${SRVROOT}/conf/ssl/serverone.crt"
  SSLCertificateKeyFile "${SRVROOT}/conf/ssl/serverone.key"
  DocumentRoot "${SRVROOT}/htdocs"
	CustomLog "${SRVROOT}/logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
	<Directory "${SRVROOT}/htdocs">
		Options Indexes Includes FollowSymLinks
		AllowOverride AuthConfig Limit FileInfo
    Require all granted
	</Directory>
</virtualhost>

<VirtualHost *:443>
  SSLEngine on
  ServerName servertwo.tld:443
  SSLCertificateFile "${SRVROOT}/conf/ssl/servertwo.crt"
  SSLCertificateKeyFile "${SRVROOT}/conf/ssl/servertwo.key"
  DocumentRoot "${SRVROOT}/htdocs"
	CustomLog "${SRVROOT}/logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
	<Directory "${SRVROOT}/htdocs">
		Options Indexes Includes FollowSymLinks
		AllowOverride AuthConfig Limit FileInfo
    Require all granted
	</Directory>
</virtualhost>

初期設定としては、デフォルトのVirtualHost、「serverone.tld」と「servertwo.tld」のサーバー名を
持ったVirtualHostの3つが登録してあります。「serverone.tld」、「servertwo.tld」などが
使いたければ、hostsファイルに書くなりする必要がありますが。

それぞれ、SSLEngine、SSLCertificateFile、SSLCertificateKeyFileの設定がしてありますね。

初期状態で「https://localhost」にアクセスすると、以下の定義が使われることになります。

<VirtualHost _default_:443>
  SSLEngine on
  ServerName localhost:443
  SSLCertificateFile "${SRVROOT}/conf/ssl/server.crt"
  SSLCertificateKeyFile "${SRVROOT}/conf/ssl/server.key"
  DocumentRoot "${SRVROOT}/htdocs"
# DocumentRoot access handled globally in httpd.conf
	CustomLog "${SRVROOT}/logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
	<Directory "${SRVROOT}/htdocs">
		Options Indexes Includes FollowSymLinks
		AllowOverride AuthConfig Limit FileInfo
    Require all granted
	</Directory>
</virtualhost>

なお、自己署名証明書自体は、「conf/ssl」ディレクトリの配下にあります。

その他にHTTPSなVirtualHostを使いたければ、httpd-ahssl.confや、httpd.confでhttpd-ahssl.confを
読み込んだ後にVirtualHostを追加すればよいでしょう。

例えば、こんな感じで。ServerNameは、「my.webserver.com」とし、SSL証明書はデフォルトのもの(server.crtとserver.key)を
とりあえず使っています。

<VirtualHost *:443>
  SSLEngine on
  ServerName my.webserver.com:443
  SSLCertificateFile "${SRVROOT}/conf/ssl/server.crt"
  SSLCertificateKeyFile "${SRVROOT}/conf/ssl/server.key"
  DocumentRoot "${SRVROOT}/htdocs"
	CustomLog "${SRVROOT}/logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
	<Directory "${SRVROOT}/htdocs">
		Options Indexes Includes FollowSymLinks
		AllowOverride AuthConfig Limit FileInfo
    Require all granted
	</Directory>
</Virtualhost>

あとは、hostsにこんな感じに書けば、「https://my.webserver.com/」でアクセスできるようになりますよ、と。

127.0.0.1 my.webserver.com

あとはVirtualHostディレクティブの内容を適当に変えていくのでしょう。