IISが稼働中の環境にApache2.4を入れ、ポート80をIISからApacheへと切り替える

IISが稼働中の環境にApache2.4を入れ、ポート80をIISからApacheへと切り替える機会がありました。

そこで、以下を参考に試したことをメモしておきます。
Apacheインストール - Apache入門

 
目次は以下です。

 

環境

 
また、今回はPowerShell 5.0でIISやzip解凍などのWindowsまわりの設定を行うため、事前にインストールしておきます。
Download Windows Management Framework 5.0 from Official Microsoft Download Center

PowerShellのバージョンは以下の方法で確認します。

# バージョン確認
PS C:\> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      3.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.42000
BuildVersion                   6.2.9200.16481
PSCompatibleVersions           {1.0, 2.0, 3.0}
PSRemotingProtocolVersion      2.2

# PowerShell 5.0 インストール後
PS C:\> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.0.10586.117
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.10586.117
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

 

セットアップの流れ

Apacheのダウンロード

Apache公式では、Windows向けのバイナリを配布していません。
Using Apache HTTP Server on Microsoft Windows - Apache HTTP Server Version 2.4

ただ、公式からいくつかリンクがあったため、今回は参考サイトにもあったApache Loungeのバイナリを使用します。
Apache VC14 binaries and modules download

 
Apache Loungeでは、32bitと64bitのApacheのバイナリが用意されているため、どちらを入れるかを検討します。

今回の環境は

  • 64bitOS
  • 32bitのPythonが稼働
  • 今後mod_wsgiを導入する可能性あり

のため、ApachePythonと同じ32bitにしておきます。

 

Microsoft Visual C++ 2015 再頒布可能パッケージのインストール

Apache Loungeのバイナリを動作させるためには、Microsoft Visual C++ 2015 再頒布可能パッケージが必要です。

C++も32bit/64bitの2つがありますが、Apacheと同じbit数にする必要がありますので、今回は32bitのvc_redist.x86.exeをインストールします。
Download Microsoft Visual C++ 2015 再頒布可能パッケージ Update 2 from Official Microsoft Download Center

 

Apacheのダウンロードと展開

コマンドプロンプトではファイルをダウンロードするのにBITSAdmin.exeを使っていましたが、

Windows 7 では BITSAdmin.exe は廃止された

BITS (バックグラウンド インテリジェント転送サービス) を Windows PowerShell で管理する

という記述を見かけたため、これを機会にPowerShellを使うことにします。

なお、いろいろとあるといけないので、管理者権限をもつPowerShellを使って、ダウンロードと解凍・配置を行います。

# BitsTransferモジュールを使った、Apache2.4 32bitのダウンロード
PS C:\temp> Import-Module BitsTransfer
# 現在のディレクトリに、`httpd-2.4.20-win32-VC14.zip`というファイル名で落ちてくる
PS C:\temp> Start-BitsTransfer https://www.apachelounge.com/download/VC14/binaries/httpd-2.4.20-win32-VC14.zip

# zipファイルの解凍
PS C:\temp> Expand-Archive httpd-2.4.20-win32-VC14.zip

# C直下にコピー
PS C:\temp> Copy-Item -Path C:\temp\httpd-2.4.20-win32-VC14\Apache24 -Destination c:\ -Recurse

 

Apacheの起動

PowerShellからApacheを起動します。

PowerShellなので、カレントディレクトリの指定(.\)を忘れずに行います。
Windows PowerShellコマンド&スクリプティング入門:PowerShellスクリプティングの第一歩(後編) (1/5) - @IT

# ディレクトリ移動
PS C:\temp> cd c:\Apache24\bin

# Apacheの起動
PS C:\Apache24\bin> .\httpd
(OS 10013)アクセス許可で禁じられた方法でソケットにアクセスしようとしました。  : AH00072: make_sock: could not bind to address [::]:80
(OS 10013)アクセス許可で禁じられた方法でソケットにアクセスしようとしました。  : AH00072: make_sock: could not bind to address 0.0.0.0:80
AH00451: no listening sockets available, shutting down
AH00015: Unable to open logs

エラーが出てApacheを起動できませんでした。

 
エラーメッセージより、IISの影響でApacheの起動に失敗したと考えられました。そこで、PowerShellIISがバインドしているポートを確認します。
Get-WebBinding - TechNet PowerShell

PS C:\Apache24\bin> Get-WebBinding

protocol bindingInformation
-------- ------------------
http     *:80:

IISApacheとで、ポート80が重複しているようです。

 
そこで、IISのポートを8081に変更します。
Set-WebBinding - TechNet PowerShell

# 変更
PS C:\Apache24\bin> Set-WebBinding -Name 'Default Web Site' -BindingInformation "*:80:" -PropertyName "Port" -Value "8081"

# 確認
PS C:\Apache24\bin> Get-WebBinding -Name "Default Web Site"

protocol bindingInformation
-------- ------------------
http     *:8081:

 
これでポート80の重複がなくなったため、もう一度Apacheを起動します。

PS C:\Apache24\bin> .\httpd

問題なく起動しました。

 
ブラウザでhttp://localhostにアクセスすると、It works!が表示されたため、Ctrl + Cで停止しておきます。

 

Apacheをサービスへ登録

続いて、Apacheをサービスに登録します。

PS C:\Apache24\bin> .\httpd -k install
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.

サービスとして登録は出ていますが、開始はできなかったようです。

 
念のためサービスの状態を確認します。

PS C:\Apache24\bin> Get-Service Apache2.4

Status   Name               DisplayName
------   ----               -----------
Stopped  Apache2.4          Apache2.4

サービスには登録できているようです。

 
そこで、もう一度、Apacheを起動してみます。

# Apacheのサービス開始
PS C:\Apache24\bin> .\httpd -k start

# サービスの状態を確認
PS C:\Apache24\bin> Get-Service Apache2.4

Status   Name               DisplayName
------   ----               -----------
Running  Apache2.4          Apache2.4

問題なく起動したようで、http://localhostにアクセスすると、It works!が表示されました。

 

IISの動作確認

念のためポートを変更したIISの動作を確認します。

ブラウザでhttp://localhost:8081にアクセスしたところ、ようこそページが表示され、正常に動作していることが確認できました。

 

参考

PowerShellIIS向けコマンドレットがまとまっています。
Web Server (IIS) Administration Cmdlets in Windows PowerShell