Nginxは、ロシア人によって開発された最初のWebサーバであり、これは現在、世界中で人気があり、私はあなたがそれを知らないわけではないと信じています。PHPはまた、パフォーマンスに焦点を当てた開発の20年以上を通して7シリーズのバージョンに来ています。近年では、パートナーのこのペアは、君臨し、基本的にLNMPは、瞬間の標準となりました。しかし、あなたはNginx + PHPのペアのように多くの年を使用している、あなたは本当に彼らがお互いにどのように通信する方法を相互作用する方法を知っていますか?
まず、Nginxの人気とPhp-fpm関連の知識ポイントです。
Nginx
Nginxは高性能なHTTPおよびリバースプロキシサーバであり、IMAP/POP3/SMTPサーバでもあります。
Php-fpm
、CGI、高速-cgi
cgiの歴史
初期のウェブサーバーはhtmlのような静的なファイルしか扱えませんでしたが、技術が進化するにつれ、phpのような動的言語が登場しました。
ウェブサーバーはそれを処理できません。それなら、phpインタプリタに処理させましょう!
phpインタプリタに任せるのはいいのですが、phpインタプリタはどのようにウェブサーバーと通信するのですか?
異なる言語インタプリタがウェブサーバと通信する問題を解決するために、cgiプロトコルが登場しました。cgiプロトコルに従ってプログラムを書きさえすれば、言語インタープリタとウェブサーバの通信を実現することができます。php-cgiプログラムなど。
fast-cgiの改良
phpインタプリタがウェブサーバと通信する問題を解決するcgiプロトコルにより、ウェブサーバはついに動的言語を扱えるようになりました。
しかし、ウェブサーバはリクエストを受け取るたびに cgi プロセスを fork し、リクエストの終了時にそのプロセスを kill します。つまり、10000 リクエストがあった場合は、10000 回 php-cgi プロセスを fork して kill する必要があるということです。
資源の無駄遣いと感じたことはありますか?
fast-cgi は各リクエストの後にプロセスを kill するのではなく、 プロセスを保持することで、プロセスが一度に複数のリクエストを 処理できるようにします。そのため、毎回プロセスを再フォークする必要がなく、効率が大幅に向上します。
、php-fpm
- php-fpm即php-Fastcgi Process Manager.
- php-fpm は FastCGI の実装で、プロセス管理機能を提供します。
- プロセスにはマスタープロセスとワーカープロセスがあります。
- 通常、複数のワーカープロセスが存在し、それぞれのワーカープロセスに PHP インタプリタが組み込まれています。
次に、NginxとPhp-fpmの組み合わせです。
Nginxはhttpリクエストを処理するだけでなく、リバースプロキシも行います。
そのため、Nginx は動的なリクエストをリバースプロキシ機能を使ってバックエンドの Php-fpm にリダイレクトします。
新しいNginx+Php-fpmの設定方法は以下の通りです。
, nginx.confファイルの設定
nginxディレクトリに移動し、nginx.confファイルを編集します。
図のように、nginx.confの最終行にインクルードファイル
、対応するサーバーを追加
上記のインクルードのパスに移動し、サーバーを追加します。
設定項目の意味を以下に説明します:
server { listen 80; #ポート80でリスニング、httpリクエストを受け取る
server_name www.example.com; #ウェブサイトのアドレスである
root /usr/local/etc/nginx/www/huxintong_admin; # コードプロジェクトを格納するパスを準備する
#ウェブサイトのルートディレクトリwwwへのルート.example.com処理時間
location / { index index.php; #wwwにジャンプする.example.com/index.php
autoindex on;
}
#ウェブサイトの下にphpファイルを要求するときは、phpへのリバースプロキシ-fpm
location ~ \.php$ { include /usr/local/etc/nginx/fastcgi.conf; #nginxのfastcgiモジュールをロードする
fastcgi_intercept_errors on; fastcgi_pass .1:9000; #nginx fastcgiプロセスがリッスンするIPアドレスとポート
}
}
簡単に言うと、www.example.com的时候、処理の流れは次のようになります:
www.example.com
Nginx
wwwへのルート.example.com/index.php
高速nginxをロードする-cgi
fast-cgi .1:9000
www.example.com/index.phpで要求が到着する.1:9000
プロセスを待つ。
php-fpm がこのリクエストを処理できるようにする方法は次のとおりです。
php-fpm.confファイルを開き、以下の設定を確認します:
つまり、php-fpm モジュールは 127.0.0.1:9000 番ポートをリッスンし、リクエストが来るのを待ちます。
php-fpmによるnginxの完全なプロセスは次のようになります。
www.example.com
Nginx
wwwへのルート.example.com/index.php
高速nginxをロードする-cgi
fast-cgi .1:9000 .
www.example.com/index.phpで要求が到着する.1:9000
php-fpm .1:9000
php-fpm リクエストを受け取り、ワーカープロセスがリクエストを処理できるようにする。
php-fpm リクエストを処理した後、nginxに戻る
nginxhttp経由でブラウザに結果を返す
IV.
, nginxとphp-fpmモジュールを起動します。
正常に開始されました。
上に示したように、1つのマスタープロセスと3つのワーカープロセスがあります。
ウェブサイトディレクトリにファイルを作成
以下のようにファイルを編集してください:





