情報システム部の高野です。
ASP.NET Coreは、標準でKestrelというWebサーバで実行されますが、
本番環境では、機能不足なのでIISやNginxをフロントに立ててそこからリバースプロキシするのが一般的だと思います。
今回は、リバースプロキシではない方法でIISから直接実行する方法をご紹介します。
IISの設定
まず必要なモジュールがインストールされているか確認します。
IISのモジュール画面を開き「AspNetCoreModule」があるか確認します。
なければこちらからWindows (Server Hosting)を選択して
ダウンロードしてインストールをしてください。
アプリケーションプールを作成します。
この時に「.Net CLRバージョン」を「マネージコードなし」にします。
Webサイトを作成します。
先ほど作成したアプリケーションプールを選択します。
あとのパラメータは適当に設定してください。
アプリケーションのデプロイ
publishコマンドを使ってデプロイ用のモジュールを作成します。
dotnet publish --framework netcoreapp1.0 --output "c:\temp\sampleApp" --configuration Release
ここまでの設定でIIS上でアプリケーションが動くようになっているはずです。
ちなみに再度デプロイをする際にIISを止めておかないとエラーになります。
Windows認証にしてみる
上記の方法で動かす方法を調査したきっかけが、
いま手掛けているシステムがWindows認証を行う必要がでてきたからなんですね。
ということで、ついでにWindows認証の方法も記載しておきます。
IISでWindows認証を有効にします。
これだけだと認証の情報がアプリケーションには伝わらないので
アプリケーション側の設定を変更します。
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