IIS:Windows上でのサイト公開
VPSにIIS Webサーバーをインストールし、独自ドメインで最初のサイトを公開し、証明書を取得し、ログの肥大化を防ぐ方法を解説します。
更新日 2026年8月23日
IISはWindows Serverに組み込まれているWebサーバーです。ASP.NETアプリケーション、静的コンテンツ、そしてローカルポートで待ち受けるサービスの前段に置くリバースプロキシとして問題なく動作します。
インストール
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
Install-WindowsFeature Web-Asp-Net48, Web-Http-Redirect, Web-Dyn-Compression
ファイアウォールでポートを開放します。
New-NetFirewallRule -DisplayName "HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
New-NetFirewallRule -DisplayName "HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
コントロールパネルの「概要」/hosting/vds/m/<id>に表示されるマシンのアドレスでスタートページが開くことを確認してください。開かない場合はWindowsファイアウォールを参照してください。
最初のサイト
Import-Module WebAdministration
New-Item -ItemType Directory C:\sites\example
Set-Content C:\sites\example\index.html "<h1>It works</h1>"
New-WebAppPool -Name "example"
New-Website -Name "example" -Port 80 -HostHeader "example.ru" `
-PhysicalPath "C:\sites\example" -ApplicationPool "example"
ホストヘッダー(-HostHeader)を使うと、1つのアドレスで複数のサイトを運用できます。IISはドメインによってサイトを区別します。ドメインはAレコードでマシンのアドレスを指している必要があります。
サイトに必要なのはディレクトリに対する最小限の権限、つまり読み取りだけです。
icacls C:\sites\example /grant "IIS AppPool\example:(OI)(CI)R" /T
HTTPS証明書
無料の証明書を取得する最も簡単な方法はwin-acmeクライアントです。wacs.exeをダウンロードし、管理者として実行して、一覧からサイトを選択してください。証明書が発行され、サイトにバインドされ、更新タスクが作成されます。
バインドを確認するには次のコマンドを実行します。
Get-WebBinding -Name "example"
New-WebBinding -Name "example" -Protocol https -Port 443 -HostHeader "example.ru" -SslFlags 1
証明書を発行するには、外部からポート80が開放されている必要があります。ドメインの検証はこのポートを通じて行われます。
IISの背後で動かすアプリケーション
サービス(Node、Python、.NET Kestrel)が127.0.0.1:5000で待ち受けている場合は、URL RewriteモジュールとApplication Request Routingモジュールをインストールし、プロキシを有効にして、サイトのweb.configに以下を追加します。
<rule name="proxy" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://127.0.0.1:5000/{R:1}" />
</rule>
こうすることで、証明書を持つIISだけが外部に公開され、アプリケーションはlocalhostに留まります。
運用
Get-Website | Select-Object Name, State, PhysicalPath
Restart-WebAppPool example
Get-WebAppPoolState
ログはC:\inetpub\logs\LogFilesに保存され、際限なく増えていきます。40 GBのディスクではすぐに容量を圧迫します。IISマネージャーの「ログ記録」セクションでローテーション(日単位のファイル)を設定し、古いログはスケジュールタスクで削除してください。
Get-ChildItem C:\inetpub\logs\LogFiles -Recurse -File |
Where-Object LastWriteTime -lt (Get-Date).AddDays(-30) | Remove-Item -Force
よくあるエラー
- エラー 500.19 —
web.configの破損、またはモジュールの不足です。ローカルからの要求に対して詳細メッセージを有効にすると、エラー本文に正確な原因が表示されます。 - アプリケーションプールが勝手に停止する。 ラピッドフェイル保護が働いています。サイトがクラッシュし、IISがそれを停止させています。アプリケーションログ(
Get-WinEvent -LogName Application -MaxEvents 30)で原因を確認してください。 - サイトはアドレスでは開くがドメインでは開かない。 ホストヘッダーが一致していないか、DNSがまだ更新されていません。
- 公開後に403が返る。 アプリケーションプールにディレクトリの権限が付与されていません。
サイトのディレクトリは
C:\inetpubの外に置き、C:\sitesのような別のフォルダーにしてください。バックアップが簡単になり、データを失うことなくシステムを再インストールできます。