ホームページ  >  記事  >  php教程  >  IIS7.0 が FastCGI 経由で PHP を実行するときに発生する問題と解決策

IIS7.0 が FastCGI 経由で PHP を実行するときに発生する問題と解決策

WBOY
WBOYオリジナル
2016-07-09 09:09:511083ブラウズ

2 日間の苦労の末、最終的に PHP Web サイトを Apache から IIS7 に移行しました。移行プロセス中にいくつかの問題が発生しました。ここで共有します。 まだ問題があるので、助けていただければ幸いです。

この記事では次の内容は扱いません:

  1. IIS7のインストール
  2. IIS7.0用のFastCGIのインストールと構成
  3. UrlScan のインストールと構成
  4. PHP を実行するように IIS7.0 を構成する方法
  5. PHP Web サイトを Apache から IIS7 に移行する必要があるのはなぜですか

上記の内容を知りたい場合は、http://www.iis.net および http://www.php.net の Web サイトにアクセスして、関連するコンテンツを多数見つけることができます。検索エンジンの参考資料。

IIS7.0上でFastCGIを使用してPHP実行環境を構築し、PHPプログラムが正常に動作することを確認した後、PHPプログラムをデプロイし、プログラムの元データと設定情報をインポートします。 Apache サーバーがポート 80 を占有しているため、最初に Apache を停止し、Web サイトを実行するためにポート 80 を使用するように IIS7.0 を設定します。 PHP プログラムは最終的に IIS7.0 で動作しました。かなり良くなりました (笑)...

でも、幸せになるのは早かったようで、すぐに問題が起こりますL

1.一部の画像が表示されません

私の同僚は、多くの写真が表示できないことに気付きました。 Apacheでは問題ないのでIIS7.0に移行してもドメイン名やファイルパスは変わっていないので問題ないはずです。私はすぐに問題の確認とトラブルシューティングを開始しました。まず、同僚から提供された情報に基づいてページを確認しました。その後、Web サイト上の写真をランダムに確認したところ、いくつかの写真が表示されないことがわかりました。すべてのパスに日本語または中国語の文字が含まれているのはなぜですか? ? ?

何度も混乱しましたが、まだ手がかりがありません。ブラウザで画像を再度開くしかありません。エラー メッセージから役立つ情報が見つかるといいのですが、エラー メッセージは 404 ファイルが見つかりませんでした。その他の値の参考情報。このとき、リモートでサーバーに接続し、サーバー上でアクセスしました(笑)。エラー メッセージは、以下に示すように、より詳細でした。

IIS7.0 が FastCGI 経由で PHP を実行するときに発生する問題と解決策

なんと、UrlScan がリクエストを拒否しました。UrlScan のログ ディレクトリ C:WindowsSystem32inetsrvurlscanlogs でログ ファイルを開くと、「拒否された URL+contains+high+bit+character URL」に似たレコードが多数見つかりました。これはなぜですか? ? ? URLScan を IIS7.0 にインストールすると、すべての要求が aspnet_filter と要求フィルタリングによってフィルタリングされることがわかりました。要求フィルタリングのフィルタリング ルールは、UrlScan のインストール ディレクトリ C:WindowsSystem32inetsrvurlscanUrlScan.ini ファイルにあります。AllowHighBitCharacters= というルールがあります。 0、IIS 公式 Web サイトの説明は次のとおりです:

この機能は、非 ASCII 文字を含む IIS 7 へのすべてのリクエストを許可または拒否し、エラー コード 404.12 をログに記録し、非 ASCII を含むすべてのリクエストを許可または拒否します文字とログ 404.12 エラーが記録されます。ルールのデフォルトは 0 です。これは、高ビット文字 URL を含むリクエストが拒否されることを意味します。 AllowHighBitCharactersの値を1に変更し、ようやく画像が正常に表示されるようになりました。

AllowHighBitCharacters の構成に関して、UrlScan.ini で構成されたルールはマシン全体のレベルであり、IIS7.0 上のすべての Web サイトに適用されます。 IIS 公式 Web サイトの手順に従って、Web サイト レベルで設定することもできます。 IIS マネージャーでは、左側で指定した Web サイトを選択し、中央の機能領域で [リクエスト フィルタリング] を選択し、機能をダブルクリックして、右側の操作領域で [機能設定の編集] をクリックして、[許可] を選択またはキャンセルできます。 「高ビット文字」項目だけで十分です。次のコンテンツを Web サイトの web.config に直接追加することもできます:

ただし、私のテストによると、UrlScan.ini でAllowHighBitCharacters=0 が設定されている場合、Web サイト レベルで上記のように web.config でAllowHighBitCharacters="true" を設定してもまったく機能せず、IIS7.0 は依然として処理を拒否します。非 ASCII 文字を含むリクエスト。UrlScan.ini でAllowHighBitCharacters=1 が設定されている場合は、Web サイト レベルで上記のように web.config でAllowHighBitCharacters="true|false" を設定すると有効になります。 IIS7.0 が FastCGI 経由で PHP を実行するときに発生する問題と解決策

これはなぜですか?誰かが私に指導してくれることを願っています。

2.

JQueryに基づく多くの関数は無効です

日付選択ボックスが無効、ポップアップレイヤーが無効、入力検証が無効...しかし、これはなぜでしょうか?

幸いなことに、すべてのステップが知恵につながります。今回は URLScan ログを見に行き、JS の読み込み記録の多くが「拒否された URL+contains+dot+in+path URL」であることを発見しました。 UrlScan.ini の URL を確認すると、AllowHighBitCharacters の下にAllowDotInPath 設定があります。これは、拡張子以外のドット文字 [.] を URL に含めることができないことを意味します。 JQuery ライブラリと多くの拡張プラグインのファイル名にドットが含まれている場合は、AllowDotInPath の値を 1 に変更すれば、問題なく Web サイトを開くことができます (笑:)

注: UrlScan.ini のAllowDotInPath の説明では、1 に設定すると拡張子ベースのチェックが信頼されなくなるため、テストの場合を除いて 1 に設定することはお勧めできません。

これら 2 つの問題が解決されると、Apache から IIS7.0 への PHP プログラムの移行が完了します。

最後に、もう 1 つ問題があります。つまり、私たちの PHP ウェブサイトは IIS7.0 で実行されているのですが、アクセスするとページが空白になることがありますが、プロセスを直接リサイクルするか再起動すると問題は解決します。わかりました、何が問題なのかわかりません。この問題を理解し、私を啓発し、アドバイスをくれる園芸仲間がいることを願っています。よろしくお願いします。

注: この問題は、http 接続時間を短縮し、アプリケーション プール内の最大接続数と同時接続数を増やすことで解決されました。

参考:

  1. http://learn.iis.net/page.aspx/143/use-request-filtering/
  2. http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-7/
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。