2018年11月7日水曜日

IIS上に素の.htmlファイルを公開するだけで500(Internal Server Error)エラー

<症状>

IIS上に素の.htmlファイルを公開したらアクセスの最初に500エラーが発生。
再読込をすると正常にアクセス可能。
という症状が発生。

再読込をすると正常にアクセスできたので気にしてなかったら客先から指摘されてしまった。いろいろ弄ってると一定時間経つと「最初だけ500エラーが発生」の状況に戻ることがわかった。

Apache1.3の頃から使っていた者としてはナカナカ不思議な現象。
仮想ディレクトリ作ってhtmlファイル置いてるだけなんですけど。
まぁ、IISですからいろいろあるわな、と。

環境は以下の通り。
WindowsServer2012R2
IIS8.5

客向けのDEMOサイトのためHTML、CSS、JSのみのプレーンな作り。
サーバーサイドは.NetもPHPもASPも何もなし

<調査>

アクセスログによるとステータス500
sc-status:500
sc-substatus:19

とのことで

IIS 7.0、IIS 7.5、および IIS 8.0 の HTTP 状態コード


なんかを見ると
500.19 - 構成データが無効です。
とのこと。

....htmlファイル公開するだけなのにweb.configが要るんか!?
ってことでとりあえず空に近い以下のようなweb.configを設置。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.web>
    </system.web>
</configuration>
でも症状は変わらず。

<対応>

ググってググってグーグル先生もネタ切れの模様を呈してきたとこで
「アクセス権」の文字列を発見(残念ながら該当サイトは失念)

というわけで仮想ディレクトリとして指定した元のディレクトリを確認すると
IUSRの指定はあったけどIIS_IUSRSの指定が無いという
おなじみの状態につき、IIS_IUSRSにフルアクセスをくれてやった。
(アプリケーションプールユーザは追加せず)

数時間置いて確認を3度ほど繰り返し無事問題解決したことにした。

<その後>

とりあえず社内で報告を書いたところ「Blogに残しといてくれ」との依頼により、この記事の執筆に至る。

この記事を書くために、アクセスしたサイトをもう一度巡ったり、置いといたweb.configとってきたりする中で、上記の「sc-status」、「sc-substatus」の文字列が欲しかったのでもう一度アクセスログを開き、ヘッダ文字列をコピペ。

すると....

#Fields: …中略… cs(Referer) sc-status sc-substatus sc-win32-status time-taken

????
sc-win32-status」ナニコレ?美味しいの?

該当のログは
sc-status sc-substatus sc-win32-status
500 19 5

とあったので
sc-status:500
sc-substatus:19
sc-win32-status:5
ってことらしい。

ということでググってみる

System Error Codes (0-499)
ERROR_ACCESS_DENIED
5 (0x5)
Access is denied.
Access is denied!
Access is denied!!

チュドーン!\(^o^)/

(500.19に文句を言いたい気持ちをぐっと抑えて)
ログはしっかり確認しましょうというあまり面白くもないオチと教訓でした。

とある規格化されたコード

世の中こんなもんまで規格化されていますよ、というお話 https://ja.wikipedia.org/wiki/ISO_5218 この辺が大変良くできた、ためになる(?)解説記事です。(長い https://qiita.com/aoshirobo/items/32deb...