ホームページ  >  記事  >  バックエンド開発  >  PHPとWebサーバーのリンク原理

PHPとWebサーバーのリンク原理

WBOY
WBOYオリジナル
2016-06-20 12:35:41837ブラウズ

php の fastcgi と php-fpm とは何ですか?

php

最近、php のパフォーマンスについて調べて学んでいたのですが、factcgi と php-fpm について調べてみました。それらについての理解はほとんどなく、ほとんど何もないと言ってもよく、考えてみると非常に恐ろしいことです。この点を注意深く研究することにしました。

以下の記事を参考に勉強しました:
1. mod_php、mod_fastcgi、php-fpm の紹介、比較、パフォーマンスデータ
2. 実践的な Nginx_replacement

導入方法fastcgi と php-fpm を順を追って説明していきます。まずは PHP 周りのことを少しずつお話していきます。なぜ。突然、人生はとても疲れるものだと感じます!

まず Web サーバーについて話しましょう

php は Web のために生まれたバックエンド言語です。もちろん、私たち PHP 専門家がそれを最もよく知っています。したがって、PHP はバックエンド言語にすぎないため、Web サーバーに依存して Web 機能を提供する必要があります。もちろん、他のバックエンド言語が Web アプリケーションに使用されている場合は、Web サーバーにも依存する必要があります。はい、phpからWebサーバーを導入しました、よし!

では、一般的な Web サーバーとは何でしょうか?最も一般的に使用される PHP ドッグは Apache で、他にも次のようなものがあります:

  • apache

  • nginx

  • IIS

  • lighttpd

  • tomcat

基本的には上記以外で、php に関連して最も一般的に使用されるものは、Apache と Nginx です。

まず、完全な php アクセスを説明するための例として、Web サーバーとして Apache を使用してみましょう。

この図は、php と Apache を mysql データベースと組み合わせて Web がどのように一度に完成するかを非常によく説明しています。アクセスフローチャート

mod_php モード

php は Web 機能サービスを提供するために Web サーバーに依存する必要があると明確に述べられています。次に、この 2 つがどのようにして友達になったのかを見てみましょう。

私たちが最もよく使用するのは Apache です。思い出してください、Apache はどのようにして PHP コードを認識できるのでしょうか? Apache 設定ファイル httpd.conf に次の文を追加または変更する必要がありますか:

//加入以下2句LoadModule php5_module D:/php/php5apache2_2.dllAddType application/x-httpd-php .php//将下面的<IfModule dir_module>    DirectoryIndex index.html</IfModule>//将其修改为:<IfModule dir_module>    DirectoryIndex index.html index.htm index.php index.phtml</IfModule>

上記の手動設定は、Windows で php と Apache 環境をインストールした後、Linux でのソース コードのインストールが大まかに設定されています。

./configure --with-mysql=/usr/local --with-apache=/usr/local/apache --enable-track-vars

このように、これらの共通の本質は、LoadModule を使用して php5_module をロードすること、つまり php を Apache のサブモジュールとして実行することです。 Web 経由で php ファイルにアクセスすると、Apache は php5_module を呼び出して php コードを解析します。

それでは、php5_module はどのようにしてデータを PHP パーサーに渡して PHP コードを解析するのでしょうか?

答えは sapi を通してです

Apache、php、sapi の関係について詳しく説明するために、別の図を見てみましょう:

から上の図を見ると、sapi がそのような中間プロセスであることがわかります。SAPI はソケットに似た外部通信用のインターフェイスを提供し、PHP が他のアプリケーション (Apache、nginx、cli など) と対話できるようにします。 PHP は、Apache および nginx 用の共通の php5_module、CGI、IIS 用の ISAPI、および Shell CLI など、多くの種類の SAPI をデフォルトで提供します。

つまり、上記の Apache 呼び出し php 実行プロセスは次のとおりです。

apache -> httpd -> php5_module -> sapi -> php

わかりました。 php5_module を通して Apache と php を理解しましょう!

この操作モードを mod_php モードと呼びます

mod_fastcgi モード

上記で、php と apache は php5_module を通じて php にアクセスし、php5_module は sapi を通じて php にアクセスして、次のことを実現します。 php web のプロセス全体。

前述したように、sapi は php によって提供される統合インターフェイスであり、Web サーバーが php コードをリンクして解析するための php5_module と CGI を提供します。上記の php5_module 読み込みモードは mod_php モードと呼ばれます。

それでは!ダンダンダン! fastcgi モードについてはすぐに説明しましょう。ハハハハ、それは受け入れられません。

PHP の sapi のもう 1 つの方法は、cgi モードを提供することです。cgi は比較的古いため、fastcgi がそれを置き換えるようになりました。

それで、ねえ。まさか、改めて CGI とは何ですか?

CGI (Common Gateway Interface)。 CGI とは、外部アプリケーション(CGI プログラム)と Web サーバー間のインターフェース規格で、CGI プログラムと Web サーバー間で情報を転送するための手順です。 CGI 仕様により、Web サーバーが外部プログラムを実行し、その出力を Web ブラウザに送信できるようになり、Web の単純な静的ハイパーメディア ドキュメントのセットが完全に新しい対話型メディアに変わります。

公式の説明を読むのは苦痛です。簡単に言うと、CGI は Web サーバーを処理するために特別に使用されます。 Web サーバーはユーザーリクエストを受信すると、そのリクエストを CGI プログラム (php の fastcgi) に送信し、CGI プログラムはリクエストで送信されたパラメーターに従って処理 (php を解析) し、標準の HTML ステートメントを出力して返します。それを Web サーバーに送信し、クライアントに返す、これが通常の CGI の動作方法です。

CGI の利点は、どのサーバーからも完全に独立しており、仲介者としてのみ機能することです。 Apache と php へのインターフェイスを提供します。彼らは CGI 配線を使用してゲイ アクションを完成させました。この利点は、2 つの間の関連性を最小限に抑え、より独立性を高めることです。

しかし、CGI には厄介な点があります。つまり、すべての Web リクエストには起動プロセスと終了プロセスがあり、これは最も批判されている fork-and-execute モードであり、大規模な同時実行環境ではこのようになります。死んでいる。

それで。このとき、fastcgi アプリケーションが誕生しました。事前に開始され、複数の CGI モジュールがそこで実行され続け、Web からのリクエストを待ち、Web 用の HTML を生成するための PHP の解析操作を完了し、終了しません。次の Web リクエストを待ちます。さらに、これらの CGI モジュールの起動は制御可能であり、監視可能です。このテクノロジーにより、Web サーバーと PHP を異なるホスト上で実行して、生産性を損なうことなく大規模に拡張し、セキュリティを向上させることもできます。

現在、ほとんどのオペレーティング システムは fastcgi モードになっています。 CIGモードも徐々に歴史の舞台から退いています!記事内で cgi と言う場合、通常は fastcgi を指します。

この動作モードは mod_fastcgi モードと呼ばれます

次の段落で、fastcgi モードを使用して php と Apache (または nginx) を接続する方法について説明します

summary : php を Apache または ngix と組み合わせると、sapi を使用して mod_php と mod_fastcgi の 2 つの接続方法が提供されます。 mod_php モードでは、php モジュールが Apache にインストールされて実行され、この 2 つはより緊密に統合されます。 mod_fastcgi モードは、Apache がユーザーリクエストを導入した後、それを fastcgi に送信し、php に接続してアクセスを完了する中間プロセスです。

これら 2 つのモードを図で表します

mod_php モード

mod_php モードは php モジュールを Apache にインストールするため、Apache がリクエストを終了するたびにメッセージが生成されます プロセス、これこのプロセスには、PHP のさまざまな計算やその他の操作が完全に含まれています。


この図から、Apache がリクエストを受信するたびに、sapi を介してリクエストを完了するために php に接続するプロセスが生成されることがはっきりとわかります。ユーザーが多すぎる場合は、このことが考えられます。 , 同時実行数が多すぎるとサーバーが耐えられなくなります。

また、mod_php を Apache にコンパイルすると、問題が発生したときに PHP の問題なのか、Apache の問題なのかを判断することが困難になります。

mod_fastcgi モード

mod_fastcgi モードはその逆で、Apache および php から独立した独立したエンティティであり、Apache とともに起動し、複数の CIG モジュールを生成し、Apache からのリクエストを待ちます。 :

写真では先にfastcgiが起動されており、apacheから送信されたhttpdリクエストを即座に受け取り、phpにsapiを呼び出すことで完了しています。 。そして辞めません。これにより、Web サーバーが実行する作業が減り、次のリクエストをより速く処理できるため、大規模な同時リクエストを処理でき、同時実行性が大幅に向上します。

Apache と php は独立しているためです。問題が発生した場合、問題の場所を簡単に特定できます。これもこのモデルが人気の理由の一つです。

php-fpm

たくさんのことをやってきたので、最後に php-fpm について話したいと思います。 ^....^

早速本題に入り、php-fpm の利点について話しましょう。これは、mode_fastcgi モードを支援するために特別に設計されています。

うーん。非常に良いです。動作を理解した後、mode_fastcgi モードに戻りましょう。これまでの説明で、このモードがどのようなものかを理解しました。

fastcgi は、プラットフォームや言語に依存せず、インターフェイスに従って実装されている限り、独自の言語の fastcgi 機能を実現し、Web サーバーと通信できます。

PHP-CGI は、PHP によって実装された FastCGI マネージャーです。

これは PHP の公式製品であり、付属していますが、まったく強力ではなく、パフォーマンスが低すぎる上に、非常に面倒で非人間的でもあります。主に次の点に反映されます。

  • php-cgi が php.ini の設定を変更した後、新しい php-ini を有効にするために php-cgi を再起動する必要があり、スムーズな再起動は不可能です。

  • php-cgi プロセスを直接強制終了すると、php は実行できなくなります。

  • 上記の 2 つの問題は長い間多くの人を悩ませてきたため、多くの人が今でも mode_php メソッドを使用しています。

    Andrei Nigmatulin という女の子が PHP-FPM を発明したのは 2004 年になってからでした。これは PHP 固有の fastcgi です。管理 上記の 2 つの問題を非常にうまく克服しており、その他の面でもさらに強力になっています。公式 Web サイトをクリックしてください

    おっと、この記事はまたタイムアウトになったようです。よし。次のセクションでは、Windows と Linux での php-fpm のインストールと構成について説明します。以上、php-fpmとfastcgiについてわかりやすく解説しました。

    出典: https://www.zybuluo.com/phper/note/50231

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。