忘れる前に覚書。優しい文章を目指します。
ザ・覚書 ザ・覚書
出来るだけ子供にも、わかりやすいように書いて行きたいと思います。

PCバージョンでサイトを表示しています。
【ザ・覚書 3クリックアンケート実施中】
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?

サーバー関連 Apacheアップデート、CGIからFastCGI「.htaccess」とかの変更例

☆サーバー関連 Apacheアップデート、CGIからFastCGI「.htaccess」とかの変更例
今のページの関連ページのリストへ
ザ・覚書のトップページに戻る

2018年のゴールデンウィーク前。
当サイトのページの大部分が、インターネットから表示されない状態になりました。


1日程、ページが見られない状況が続き、
結果的には、原因は、レンタルサーバーの「Apache」のバージョンアップからの「.htaccess」の記述変更と、
「PHP」のバージョンアップからの、関数廃止からでした。

バージョンアップをするらしい事は、メールの通知で知っていたのですが、
「メンテナンスに伴うお客様側の作業はございません」とあったので、油断してたら、気が付かなくて、
メンテナンス後、表示されていなかったようで、
結局は、調査と対応で、表示再開までに1日程掛かってしまったことになります。

私は、サーバー系は詳しくなく、レンタルサーバーを借りている面もあるので、
そこから調査が大変でした。

この際、対応を忘れないようにまとめておきます。
(私が借りているレンタルサーバーは、「エックスサーバー」さんですので、
 他のサーバーさんで同じ対応ではダメかも知れません。)





・あらためて基礎


ホームページなどの内部ファイルを保存しているのをWebサーバーといいますが、
それに、「Apache」というWebサーバーソフトウェアを使用している場合に、
「.htaccess」という下層のディレクトリ内に対して適用される設定や制御をするファイルがある。

・旧.htaccessの一部


apache2.2。
サーバーのバージョンアップまで正常に動いていた.htaccessの一部。


AddType x-httpd-php .html

<FilesMatch "^abc$">
  ForceType x-httpd-php
</FilesMatch>


わかりやすいようにコメント入れます。

・AddType x-httpd-php .html
サーバは、ファイル名を見ただけで、それが何のファイルなのかを判断することが出来ないそうで、
多くは、サーバのデフォルト設定として登録されているようですが、

特殊な事をしたい場合、ある「拡張子」を持つものを、
「MIMEタイプ」という文書の性質や形式を示す指定で、どういう動作すると指定してやらないといけないから書いている。

その場合、「AddType」という文法で、

AddType MIMEタイプ .拡張子

という風に指定する模様。

AddType x-httpd-php .html

と書くと、
「html」の拡張子を、「x-httpd-php」というMIMEタイプで表す動作で動かすことを指定している模様。

要は、.htmlの中にPHPの構文があってもPHPで動くようにしている。


ただ、この「x-httpd-php」というMIMEタイプを調べてもよくわからない。



(追記)Apacheのデフォルトなのか不明で、
「x」と付くので、エックスサーバーさん特有のものかも知れないと思ったので質問すると、
一般的に使用されているMIMEタイプとの事。



・FilesMatch "^abc$" 辺り
「FilesMatch」は、特定のファイルに制限する。
ここでは、正規表現込みで、要は、abcというファイルは、何々という指定にしている。

・ForceType x-httpd-php

これは、ちょっと理解が乏しいが、
ForceType で、
特定のディレクトリ下のすべてのコンテンツに対して使用するMIMEタイプを指定するそう。

ここにMIMEタイプの「x-httpd-php」を指定して、
PHPとして動かす事にしている。

また、ForceTypeで指定されたファイルには、拡張子をつけなくても認識される模様。

要は、abcという拡張子なしのファイルは、PHPで動きます。
と、書いていると思っている。



さて、これで、サーバーのapache2.2の時は、正常に動いていた。

・ここでバージョンアップし、問題発生


サーバーのapacheのバージョンアップがあって、
apache2.2からapache2.4にバージョンが上がった。

色々書き替えて調べていくうちに、
AddType x-httpd-php

ForceType
が動作していない事に気がついた。

ゆえに、主に、abcという拡張子なしのファイルがPHPで動作せず、ページのほとんどが見られなくなっていた模様だった。


更に、PHPの動作は、これまで「CGI」というWebサーバ上でユーザプログラムを動作させるためのインタフェース仕様の1つで動いていたようで、
これが「FastCGI」といものに代わっている模様。

「FastCGI」というのは、プロセスの起動と終了を省略したりして、何やら早い模様。


そもそも「CGI」と聞くと、CGI言語(?)だったか? 忘れましたが、昔、アクセスカウンタを作ったりした言語の事だと思っていたのですが、
どうも違うようで、ここでいう「CGI」サーバー上で動くアプリケーションの事らしい。

よくわからないが、PHPの構文のPHPプログラムをCGIサーバーアプリケーションで動かしていたのが、
FastCGIサーバーアプリケーションで動かす事になるような感じという理解で多分良いのだろう。


.htaccessの内容は、PHPでもなんでもないかと思うが、
それも変更されていて、今までのでは動かない。


とにかく以前の.htaccessの、AddType x-httpd-phpとForceType
と同等の機能を持つ、新しい命令文に変えていかないとページが表示されないので、変えていかないといけない。

そこで、調べたり、試行錯誤して、
見つけたのが、

AddHandler fcgid-scriptや
SetHandler fcgid-scriptや
FCGIWrapper
という指定。

・新.htaccessの一部


apache2.4。FastCGI。


AddHandler fcgid-script .php .phps .html

<Files "abc">
  SetHandler fcgid-script
  FCGIWrapper "/home/サーバーID/初期ドメイン/xserver_php/php-cgi"
</Files> 


わかりやすいようにコメント入れます。

・AddHandler fcgid-script .php .phps .html
Apacheモジュールmod_mimeの設定の1つ。
このモジュールは拡張子を使って色々な「メタ情報」をファイルに関連付けるために使用する模様。

前の「AddType x-httpd-php .html」の代わり。

「.php .phps」は、別にいらないと思われるが、一応、追加しておいた。


「ハンドラ」とは、ファイルが呼ばれたときに実行される動作のApacheにおける内部表現らしく、
ファイルはファイルタイプに基づいた暗黙のハンドラがあるとのこと。
よくわからないが、そのハンドラに「追加」するととって良いだろうと思う。



(追記)「fcgid-script」というのは、「x-httpd-php」と同じように、MIMEタイプかと思ったのですが、
サーバーさんに質問すると、FastCGIでプログラムを実行する場合に必要な記述との事。
これもエックスサーバーさん独自のものではなく一般的に使用されるものとの事。



「.html」内にPHP構文があっても動作することで確認した。
AddTypeと同じような動作をしたことになる。

・Files "abc"辺り
は、の代わり、
ただ、今回は、正規表現をなくして、「このファイル」にしているが、ここは、バージョンアップによる変更ではないはず。

ファイルを指定して、次に続ける。

・SetHandler fcgid-script
前の「AddHandler fcgid-script .php .phps .html」で、
「fcgid-script」というのがPHPで動作させるというMIMEタイプであるだろうことはわかった。
「SetHandler」というのは、マッチするファイルがハンドラで処理されるようにするそうで、
まず、これをセット。

・FCGIWrapper
ルートディレクトリの.htaccessにいつの間にか勝手に追加されていた
「FCGIWrapper "/home/サーバーID/初期ドメイン/xserver_php/php-cgi」。

「サーバーID」「初期ドメイン」は、契約者個々に違います。

「FCGIWrapper」がいまだ何かわからないが、
名前からFastCGIのラッパーであるよう。

続けると、要は、
abcという拡張子なしのファイルを、
SetHandlerでPHPで動作するようにして、
それをFastCGIで動かすというような命令と思われる。



(追記)質問すると、最新のサーバー環境では「.htaccess」への記述は不要と聞いたんですが、
コメントアウトするとやはり動かず、
Files "abc"
で指定して、拡張子なしで動かす場合には、必要な模様。



試行錯誤の末、拡張子なしのファイル内のPHPの動作を確認。
あとは、追加で、PHPのバージョンアップによる廃止関数の数個を、同じような関数に修正。

やっと、サーバーバージョンアップ前と同じ動作になり、ページが表示されました。

・感想など


あとは、心配だったので、エックスサーバーさんに問題ないか確認。
問題ないとの事で、一応の解決。

しかし、これらの説明が、サーバーページのヘルプのどこにも見当たらないように思えるんですが、
そんなもののようで、「.htaccess」への記述はサポート対象外との事。
そう回答ありましたが、色々教えては頂けたのですが。






記述:2018年05月頃

Twitter Facebook Google+ はてな Pocket LINE




一言掲示板です。なにかありましたら以下に書いて書き込みボタンを押して下さい。
管理人による書き込みの確認後、荒らし書き込みでない場合に表示させていただきます。
悪意ある書き込みや挑発的な書き込みと思われる内容は、表示させません。
その為、ちょっと書き込みから表示までに時間がかかってしまいます。ご了承下さい。

お名前

コメント




文字列関連
PHP テキストファイル内容を読み込んだ時等 改行を削除
PHP fopen関数で半角スペースが間にあるファイルは認識できない?
PHP CSVファイルを扱う為の関数の1つ
PHP array_multisort関数で複数配列を一気にソートする
PHP 気が付きにくいコーディングミスの一例
PHP ファイルがあるかないかを判断する関数で悩む
PHP 配列の初期化(使い回し配列の)
PHP 長い処理が止まってしまう場合 time of 30 seconds
その他
サーバー関連 ページの表示を早くする為に、ブラウザのキャッシュを活用
サーバー関連 Apacheアップデート、CGIからFastCGI「.htaccess」とかの変更例
【ザ・覚書 3クリックアンケート実施中】
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?

今のページの関連ページのリストへ
ザ・覚書のトップページに戻る
全ページのリストへ