しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

IIS

ASP.NET Core アプリケーションでも web.config をカスタマイズしたい

ASP.NET Core のプロジェクトを dotnet publish を使って発行すると自動的に web.config が作られるようになっています。基本的に IIS や App Service でホストする場合には必須です。自動生成されるので IIS 周りのカスタマイズが難しそうに見えますが、比…

ASP.NET Core Module V2 の In-Process Hosting はアプリケーションプールで 1 つだけ利用可能

ASP.NET Core 2.2 から使えるようになった ANCM V2 の In-Process Hosting はパフォーマンス面で有利なので使っていきたいし、そもそもデフォルトは InProcess になっているので勝手に使っていると思うのですが、タイトルの通りの制約があるので注意です。In…

ASP.NET / IIS で X-Forwarded-Proto の値を正しく扱いたい

リバースプロキシやロードバランサーで SSL offload を行った場合には、後ろにいる Web サーバーにクライアントの IP などを伝えるために X-Forwarded-* を付けますが、ASP.NET は上手く扱ってくれません。X-Forwarded-For に関しては ARR Helper を入れるこ…

Brotli が使える IIS Compression モジュールが正式リリースされていた

IIS

ちょっと前に書いた Microsoft 公式の Brotli が使えるモジュールですが、いつの間にかにちゃんとインストーラとドキュメントが公開されていました。これで 1803 以降の IIS では簡単に Brotli が使えます。最近の IIS に対する動きは、割と歓迎したい流れで…

IIS で Brotli が使える公式モジュールがリリースされたので試す

IIS

Twitter を見てると IIS 向けに Microsoft 公式で Brotli が使えるモジュールが GitHub でリリースされていたので、さっそく飛びついてみました。まだソースコードでの公開なのでビルドする必要がありますが、インストーラーで配布されるでしょう。Brotli an…

ConoHa が Windows Server に対応したので契約してみた

前から Linux の VPS は主に Docker 用として契約して使ってましたが、Windows Server にも対応したと聞いたので早速契約してみることにしました。10% オフになっても 2GB プランはまあまあのお値段という感じがします。みんなお待たせっ!ついにConoHaでもW…

App Service が HTTP/2 に対応したので ASP.NET で試した

Windows Server 2016 へのアップグレードが行われた際に、一部のリージョンでテスト的に有効化されていた HTTP/2 がグローバルで GA になってました。例によって ASE にはまだデプロイされていないみたいですが、近いうちに対応するみたいです。HTTP/2 はデ…

ASP.NET でも Cookie Policy への対応を行えるか試した

ASP.NET Core 2.1 で入った Cookie Policy が面白かったのと、ASP.NET というか IIS でも HttpModule を使うことで対応出来そうだったので実装して試すことにしました。行うことは非常に単純なので、HttpModule を書いたことがあれば大体は想像がつくはずで…

Windows Server 2016 で ARR Helper が動かなくて困った話

IIS

以前に Windows 10 というか IIS 10 に対応した ARR Helper が ARR 3.0 に含まれていると書きました。実際にレジストリを弄るハックをしなくてもすんなりとインストールは出来ますが、タイトルの通り思った通りに動かなかったのでメモとして残します。地味に…

ASP.NET Core 2.1 と ANCM In-Process Hosting の話

スケジュールが遅れていた気がする .NET Core 2.1 / ASP.NET Core 2.1 ですが、Scott Hunter が Channel 9 の動画付きでブログを公開してました。昔は ASP.NET の担当だった気がしましたが、今は .NET 全体の Director だったのですね。People have been ask…

IIS CORS Module を試してみた

IIS

割と旬を逃した感じはしますが、IIS 側で CORS の設定を行える拡張モジュールがリリースされています。もっと早くリリースされていれば、苦労しなかったシーンが個人的にちらほら。これまでは URL Rewrite で頑張ってた人も多いのではないでしょうか。インス…

IIS 10.0 に対応した ARR Helper をインストールする

IIS

ARR Helper 使ってますか?私は ARR を使っている時だけではなく、前に X-Forwarded-For を付けるリバースプロキシが居るときには、ARR Helper を使うようにしています。知らない人は前に書いたエントリを読んでみてください。良さが分かるはずです。リバー…

URL Rewrite の Outbound Rule と gzip 圧縮は共存できないという都市伝説

IIS

デフォルトのまま Outbound Rule と gzip 圧縮を有効にしようとしてエラーになったことがある人は多そうです。もはや都市伝説的な感じすらしますが、適切に設定を行えば共存は可能です。当時は IIS 開発チームだった Ruslan 氏が IIS Forums 回答しています…

Docker で Windows Containers を使った時にコンテナホストから localhost でコンテナが見えない件

前に Windows Containers を使って IIS を立ち上げた時、コンテナホストから localhost でコンテナで動作しているはずの IIS を確認しようとしても出来なかったのですが、理由が分かったので書きます。ちなみに Docker と Windows Containers については前の…

Windows Server 2016 の Windows Containers と Docker を使って IIS と ASP.NET を動かしてみた

Windows Server 2016 が MSDN からダウンロード出来るようになっていたので、Service Fabric Cluster 用に買った Intel NUC にインストールしてみました。Hyper-V 上に入れた 2016 で Windows Containers を試したとき、1 日経ってもコンテナが起動しなかっ…

IIS Express TestKit で使う設定を XML Document Transform を使って操作するようにしてみた

IIS

ぼちぼち改善している IIS Express で URL Rewrite のテストを書くパッケージですが、設定周りに柔軟性が無くかなりイマイチだと思っていたので XML Document Transform を使って改善しました。NuGet に公開している最新版では XDT が使えるようになっていま…

Visual Studio Code と IIS Express を使って PHP 7 の実行環境を整える

これまで Umbraco で管理してた shibayan.jp を、もっと軽量で書きやすい Flat-file CMS である Grav に移行するために、Visual Studio Code と IIS Express で快適にローカルで確認できる環境を作ろうと思いました。少し前まではこういう場合 WebMatrix を…

ネイティブ HTTP モジュールを使って IIS のログを書き換える

IIS

久し振りに iislua に機能を追加しようと思ったので、IIS のログを書き換える方法を調べて試しました。新しい項目を追加することは出来ないみたいですが、既存の項目であれば書き換え可能みたいです。CHttpModule には OnLogRequest というメソッドがあるの…

IIS Express TestKit で Outbound Rules のテストを書けるようにした話

IIS

前回作った IIS Express TestKit が Inbound の一部にしか対応出来ていなかったので、少し気合を入れて利用範囲を広げる対応を行いました。はいふりが始まる前だったので少し急ぎました。タイトルにも書いたように Outbound Rules に対するテストが書けるよ…

IIS Express と xUnit を使って URL Rewrite のテストを書く

IIS

ASP.NET というか IIS を使ってアプリケーション開発を行っている場合、一度はお世話になっていると思う URL Rewrite ですが、割と書き方が難しいです。IIS Manager にパターンのテストツールはありますが、大した機能は持ってません。パターンをテストした…

ASP.NET Core が HttpPlatformHandler から専用の IIS モジュールに移行する理由

ASP.NET Core は元々 Helios で動かす予定だったのが、サーバーが Kestrel への 1 本化に伴い IIS 向けには HttpPlatformHandler が採用されてきましたが、少し前に HttpPlatformHandler から fork した ASP.NET Core Module が使われることになりました。公…

IIS 向けに Brotli を実装した HTTP 圧縮モジュールを作ってみた

IIS

以前に bzip2 の圧縮を行うモジュールを IIS に向けに作ったので、何となく Brotli で圧縮するモジュールも作ってみました。ちなみに Brotli は Google が開発した新しい圧縮形式です。IIS は圧縮形式をネイティブな DLL で拡張可能に作られているので、Brot…

HttpPlatformHandler v1.2 が公開されていました

IIS

Web PI を起動した時に HttpPlatformHandler がアップデートされていたことに気が付きました。インストールしてバージョンを確認したところ 7.1.1959.0 になっていました。前回のアップデートで調べた時にはバージョン 7.1.1954.0 だったので、少しだけビル…

ASP.NET 5 のサーバーから IIS (Helios) が削除された理由

ASP.NET 5 beta8 のリリース前に、割と大きな変更が入りました。IIS (Helios) の削除です。ちゃんと削除する理由が挙げられているので、適当に意訳して紹介します。 Helios 自体が DNX の役割を担ってしまっている WebListener や Kestrel などと異なり、Hos…

Lua で処理が書ける iislua を IIS 公式サイトで公開しました

IIS

IIS 公式サイトの Community Contributed Download に iislua を申請してから 1 月以上かかりましたが、昨日ようやく公開されました。基本的には GitHub へのリンクとなっています。審査をしていたのかはわかりませんが、かなり時間かかりました。今は一覧の…

URL Rewrite で環境変数の値を使うプロバイダーを書いてみた

IIS

Apache の mod_rewrite なら環境変数の値を使って条件が書けるのに、IIS の URL Rewrite ではサーバー変数の値しか使えなかったので、プロバイダーを書いて実現してみました。ちなみに mod_rewrite なら以下のように書けます。 RewriteEngine On RewriteCond…

Windows Server Technical Preview 2 と ARR 3.0 を組み合わせて HTTP/2 対応のリバースプロキシにしてみた

IIS

URL Rewrite 2.0 や ARR 3.0 が Windows Server Technical Preview 2 の IIS 10.0 へのインストールに対応したので、今更ながらインストールして遊んでみました。ARR などのアップデートに関しては以下の記事で紹介しています。Windows Server TP 2 の IIS 1…

IIS の ネイティブ HTTP モジュールで Web.config から設定を読み込む方法を調べた

IIS

IIS ネイティブ HTTP モジュールは設定を Web.config から読み込むのが一般的ですが、どうやって読み込むのか分からなかったので調べました。ネイティブ HTTP モジュールの作り方は以前に書いた通りです。IIS で使えるネイティブ HTTP モジュールの作り方 - …

Lua で処理が書ける IIS 向け HTTP モジュール lua-iis-module を作ったので公開しました

IIS

Apache と nginx では Lua を使って HTTP リクエストに対して処理を書けるのが羨ましかったので、IIS でも lua-nginx-module のような処理が書ける HTTP モジュールを実装しました。要するにパクリです。バイナリの配布はしていないので、ソースコードからの…

IIS で使えるネイティブ HTTP モジュールの作り方

IIS

最近は IIS の拡張機能について調べていたので、今回は C++ を使って HTTP モジュールを作ってみました。IIS のネイティブ HTTP モジュールはちゃんと実装手順が決まっています。まずは最初に流れを簡単に紹介しておきます。 CHttpModule を継承したクラスを…