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のバイナリが用意されているため、どちらを入れるかを検討します。
今回の環境は
のため、ApacheもPythonと同じ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 は廃止された
という記述を見かけたため、これを機会に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の起動に失敗したと考えられました。そこで、PowerShellでIISがバインドしているポートを確認します。
Get-WebBinding - TechNet PowerShell
PS C:\Apache24\bin> Get-WebBinding protocol bindingInformation -------- ------------------ http *:80:
IISとApacheとで、ポート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
にアクセスしたところ、ようこそページが表示され、正常に動作していることが確認できました。
参考
PowerShellのIIS向けコマンドレットがまとまっています。
Web Server (IIS) Administration Cmdlets in Windows PowerShell