にしし ふぁくとりー(西村文宏 個人サイト)

Presented by Nishishi via Movable Type. Last Updated: 2017/06/30. 00:40:18.

さくらインターネットでSSIを使う際、include virtualは絶対パスでの記述が必須

さくらインターネットのカスタマーセンターから、サーバが高負荷になっているとの警告が届きました。
サーバの過負荷解消のために、当該ファイルのパーミッションを000に変更して実行を一時的に制限したとのこと。
当該ファイルというのは、プログラムではなく単なるSHTMLファイルです。ただのHTMLですが、SSIを使って他のファイルを合成しています。

サーバのコントロールパネルからリソース情報のグラフを見てみると、確かにCPU使用時間がどかんと増えていました。

CPU使用時間

また、サーバのエラーログを確認すると、以下のようなエラーが1秒間に686回も発生していました。
そりゃ高負荷になりますよね……。

Request exceeded the limit of 10 subrequest nesting levels due to probable confguration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
unable to get information about "products.shtml" in parsed file /home/***/www/products.shtml

(24)Too many open files: file permissions deny server access: /home/***/www/products.shtml
unable to include "./common/ssi/submenubar-products.html" in parsed file /home/***/www/products.shtml

上記で問題になっている products.shtml は最終更新が2015年のファイルだったので、もう2年以上そのままです。その間、少なくとも高負荷で警告されるほどのエラーはありませんでした。
実は、この手のエラーが発生して負荷が高まったのは今回が初めてではありません。
ただ、ファイルの読み込みが無限ループになっちゃっているらしいということは分かるものの、なんで「ただ外部ファイルを合成しているだけのSSIで発生するのか?」が分からなかったので根本的な解決ができていなかったのですが。

今回のカスタマーセンターからの警告文には、対処方法も書いてあったので、ようやく分かりました。

SSIでファイルを合成するときにinclude virtualを使うなら、対象ファイルは絶対パスでの指定が必須

どうやらSSIでinclude virtualを使う際には、合成ファイルを絶対パスで指定しなければならないようです。
私は、一部のページではinclude virtualの値を相対パスで記述していました。これが原因だったようです。
早速、include virtualの記述を以下の通り絶対パスに書き換えました。

危 <!--#include virtual="./path/to/include.txt" -->

正 <!--#include virtual="/path/to/include.txt" -->

この場合は単に「.」記号1つを消しただけですが。
相対パスではなく「/」で始まる絶対パスになっています。

そもそもなぜ相対パスでincludeすると無限ループに陥るの?

ただ、なぜ相対パスでファイルを合成すると無限ループのエラーが発生するのかが分かんなかったのですが。
ググってみると理由を解明した方がいらっしゃいました。

→「さくらインターネットに怒られた件」(@ClockRoom)

どうやら、SSIのinclude virtualで相対パスを使って合成しているウェブページに、PATH_INFO付きでアクセスされたときに、なぜか自分自身がインクルードされることによって無限ループが発生するようだとのこと。
なんでそうなるのかは分かりませんが……。
とりあえず、SSIでファイルを合成するときには、絶対パスで書かないと無限ループが起きてしまう可能性がある、ということは分かりました。^^;

たいてい合成したいファイルは「離れた場所にある合成ファイル用のディレクトリ」にまとめてあるので、絶対パスを使っています。
ただ、最上階層に置いてあるファイルでは、何故か(自身のディレクトリより下位にあるだけなので)相対パスを使っていたのでした。

うーむ。まさかこんなことが原因だったとは。
しかし原因が分かってスッキリしました。
今後も気をつけよう。(^_^;)

コメント

コメント数: 0件

コメント投稿欄 この日記に対するコメント投稿を歓迎します。



※本文中にURLは書けません。(書くと投稿が拒否されますのでご注意下さい。)

※ご投稿頂いた内容は、掲載前に管理者が確認する設定にしている場合があります。たいていは数日以内には表示されるはずですので、気長にお待ち願います。m(_ _)m

著者紹介


にしし(西村文宏)

にししでございます。本書いたり記事書いたりしてます。あと萌えたり。著書5冊発売中です(Web製作系4冊+小説1冊)。著書や記事は「西村文宏」名義。記事は主にAll Aboutで連載。本の最新刊は2011年3月に発売されたライトノベルでございますよ。

Twitter:にしし/西村文宏
にしし/西村文宏 on facebook にしし/西村文宏 on mixi にしし/西村文宏 on Google+ フォローはお気軽に!

にしし(西村文宏)連絡先
☕ コーヒーをおごる

著書一覧と詳細

関連する記事など

※下記には、本サイト内外の関連記事などが8本くらい自動で表示されています。

にししふぁくとりー Sakura scope内限定での主要なカテゴリ

--- 当サイト内を検索 ---