IIS8.5 はフォント ファイルを提供しません

IIS8.5 はフォント ファイルを提供しません

何らかの理由で、IIS がフォント ファイルを返しません。すべて 404 として返されます。URL が正しく、MIME タイプが正しいことを確認しました。フォント ファイルは現在、MVC4 を使用する .NET 4.5 プロジェクト内にあります。ファイルをプロジェクト外のサーバーのルート ディレクトリに移動すると、ファイルは正常に提供されます。プロジェクトの web.config でファイル拡張子の処理方法がオーバーライドされていないことを確認しました。

これまでのところ、この問題は .TTF、.EOT、.SVG、および .WOFF ファイルで発生しています。同じディレクトリ内の他の静的ファイルは正常に返されます。IIS8.5 にフォント ファイルが返されないようにする設定があるのでしょうか?

失敗したリクエスト追跡によって生成されたログ ファイルを添付しました。

https://dl.dropboxusercontent.com/u/39382497/fr000001.xml

答え1

この問題は、プロジェクトに取り組む過程で自然に解決したようです。Andrew Morton は、同様の問題を抱えている人のために、優れたトラブルシューティング手順をいくつか提供してくれました。簡単なリストを示します。

  • サーバーで正しい MIME タイプが使用されていることを確認します。IIS マネージャー > サーバー > プロジェクト > MIME タイプを使用します。私の環境で動作している MIME タイプの一覧は次のとおりです。

    • .eot = アプリケーション/vnd.ms-fontobject
    • .svg = 画像/svg+xml
    • .ttf = アプリケーション/オクテットストリーム
    • .woff = アプリケーション/x-font-woff
  • それでもうまくいかない場合は、Webサーバーがプロジェクトフォルダとファイルを保存しているフォルダに権限を持っていることを確認してください。チュートリアルとても役に立ちます。

  • 次のようなツールを使用してさらにデバッグするプロセスモニターより頑固なサーバーの問題を絞り込むのに役立ちます。

これが誰かの役に立つことを願います。

答え2

ISS エラー ログのステータス コードを調べることで、この問題の解決策を診断しました。

sc-ステータス sc-サブステータス sc-win32-ステータス

500 0 1346

win32のステータスは、

ERROR_BAD_IMPERSONATION_LEVEL

1346 (0x542)

必要な偽装レベルが指定されていないか、指定された偽装レベルが無効です。

https://docs.microsoft.com/en-gb/windows/win32/debug/system-error-codes--1300-1699-

この欠陥に関する MS の記事があることがわかりました。

https://blogs.msdn.microsoft.com/asgoyal/2012/08/25/one-thing-you-must-do-when-getting-http-500-0-1346-error/

それぞれのアプリケーションのアプリケーション プール ID が「認証後にクライアントを偽装する」ポリシーの一部であるかどうかを確認します。アプリケーション プール ID は、直接または継承されたメンバーシップによって、このポリシーの一部である必要があります。

このポリシーを確認するには、[スタート] -> [実行] -> [secpol.msc] -> [ローカル ポリシー] -> [ユーザー権利の割り当て] に移動します。

私の場合、問題はこのポリシーに「IIS_IUSRS」グループがなかったことです。

答え3

これを試して:

  1. [任意のエディタ] で HTML ファイルを作成し、ブラウザに解決されたことがわかるような説明文を書き出します。

    振戦せん妄、大したことない

  2. 有効なHTMLであることを確認するためにテストする
  3. フォントのソースとなるディレクトリに配置します。[選択したブラウザ] の開発ツールで 404 エラーが表示されることでわかります (相対パスである必要があります)
  4. そこへ移動すると、解決しますか?

はいの場合、アプリケーションサーバーのMIMEタイプの設定に問題があります。

いいえの場合、予想されるパスが正しくないためフォントが解決されません。.html ファイルの 404 エラーを確認すると、Web ルートに対する unc パスが表示され、アプリケーション サーバーがフォントをどこから検索しているかがわかります。

関連情報