blog

Nginxとphpの間の相互作用と通信について話す。

まず、NginxとPhp-fpmに関連する知識のポイントを普及させる Nginxとは Nginxは、高性能なHTTPおよびリバースプロキシサーバであるだけでなく、/ / TPサーバです。pmとは 1、...

May 7, 2020 · 5 min. read
シェア

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つのワーカープロセスがあります。

ウェブサイトディレクトリにファイルを作成

以下のようにファイルを編集してください:

ウェブサイトへのアクセス

Read next

プライベートの仕事を奪うもの|エッセイ

序文\nどこから受注するか\n多くの人がどのようにシングルを受け取った私に尋ねてきた、私はちょうど1年間、この業界に連絡し、その理由の性格のため、より多くの友人を作るのが大好き、始まりは友人によるいくつかのプロジェクトの紹介です。\n最初は友達が紹介したいくつかのプロジェクトは、ゆっくりとアウトソーシング会社の責任者や上司に精通している自分のアウトソーシングを見つける必要はありませんが、主なものは、行うことです!

May 7, 2020 · 2 min read