athome-developer’s blog

不動産情報サービスのアットホームの開発者が発信するブログ

ASP.NET CoreをIISで動かす

情報システム部の高野です。
ASP.NET Coreは、標準でKestrelというWebサーバで実行されますが、
本番環境では、機能不足なのでIISやNginxをフロントに立ててそこからリバースプロキシするのが一般的だと思います。

今回は、リバースプロキシではない方法でIISから直接実行する方法をご紹介します。

IISの設定

まず必要なモジュールがインストールされているか確認します。
IISのモジュール画面を開き「AspNetCoreModule」があるか確認します。
f:id:taktak1974:20160824162813p:plain

なければこちらからWindows (Server Hosting)を選択して
ダウンロードしてインストールをしてください。


アプリケーションプールを作成します。
この時に「.Net CLRバージョン」を「マネージコードなし」にします。
f:id:taktak1974:20160824163910p:plain


Webサイトを作成します。
先ほど作成したアプリケーションプールを選択します。
あとのパラメータは適当に設定してください。
f:id:taktak1974:20160824164151p:plain

アプリケーションのデプロイ

publishコマンドを使ってデプロイ用のモジュールを作成します。

dotnet publish --framework netcoreapp1.0 --output "c:\temp\sampleApp" --configuration Release


ここまでの設定でIIS上でアプリケーションが動くようになっているはずです。
ちなみに再度デプロイをする際にIISを止めておかないとエラーになります。

Windows認証にしてみる

上記の方法で動かす方法を調査したきっかけが、
いま手掛けているシステムがWindows認証を行う必要がでてきたからなんですね。
ということで、ついでにWindows認証の方法も記載しておきます。

IISWindows認証を有効にします。
これだけだと認証の情報がアプリケーションには伝わらないので
アプリケーション側の設定を変更します。

Web.ConfigのforwardWindowsAuthTokenをtrueに変更します。

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore 
      processPath="%LAUNCHER_PATH%" 
      arguments="%LAUNCHER_ARGS%" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" 
      forwardWindowsAuthToken="true"/>
  </system.webServer>
</configuration>

これでWindows認証ができるはずです。

このままだとVisualStudio Codeでデバッグした時にログインできないので
弊社では、Kestrelで起動した場合でもログインできるように
Windows認証とは別な認証も併せて実装しています。
この辺はもう少しスマートに、やりたいのですがなかなか良い方法が見つかりません。
Windows認証をやめるのが一番なんですが・・・)



もう少し良い方法が見つかればまたこちらでご紹介したいと思います。


参考サイト
Publishing and Running ASP.NET Core Applications with IIS - Rick Strahl's Web Log