ホームページ  >  記事  >  バックエンド開発  >  PHP と nginx 間の動作メカニズムと原理の詳細な紹介

PHP と nginx 間の動作メカニズムと原理の詳細な紹介

不言
不言転載
2019-03-25 09:44:253152ブラウズ

この記事では、PHP と nginx の間の動作メカニズムと原理について詳しく説明します。一定の参考価値があります。必要な友人は参照してください。お役に立てば幸いです。

1. Nginx と Php-fpm に関連する知識ポイントを普及する

Nginx とは

Nginx (「エンジン x」) は、高性能 HTTP および Php-fpm です。応答サーバー IMAP/POP3/SMTP サーバーでもあるプロキシ サーバー。

Php-fpmとは

1.cgi、fast-cgiプロトコル

cgiの歴史

初期のWebサーバーはhtmlなどの静的ファイルのみを処理していました。しかし、テクノロジーの発展に伴い、phpなどの動的言語が登場しました。
Web サーバーが処理できません。どうすればよいですか?次に、PHP インタープリターに処理させます。
PHP インタープリターに任せるのは良いことですが、PHP インタープリターはどのように Web サーバーと通信するのでしょうか?

異なる言語インタープリター (php、python インタープリターなど) と Web サーバー間の通信の問題を解決するために、CGI プロトコルが登場しました。 CGI プロトコルに従ってプログラムを作成する限り、言語インタプリタと Webwerver 間の通信を実現できます。 php-cgiプログラムなど。

fast-cgi の改善

cgi プロトコルを使用すると、php インタプリタと Web サーバー間の通信の問題が解決され、Web サーバーは最終的に動的言語を処理できるようになります。
ただし、Web サーバーはリクエストを受信するたびに CGI プロセスをフォークし、リクエストの完了後にプロセスを強制終了します。リクエストが 10,000 件ある場合、php-cgi プロセスを 10,000 回フォークして強制終了する必要があります。

これがリソースの無駄だと感じたことはありますか?

そこで、cgi の改良版、fast-cgi が登場しました。 fast-cgi は毎回リクエストを処理した後、プロセスを強制終了せずにプロセスを保持し、プロセスが一度に複数のリクエストを処理できるようにします。このようにして、毎回プロセスを再フォークする必要がなくなり、効率が大幅に向上します。

2. php-fpmとは

php-fpmはphp-Fastcgi Process Managerです。
php-fpmはFastCGIの実装であり、プロセス管理機能を提供します。
プロセスにはマスタープロセスとワーカープロセスの2種類のプロセスが含まれます。
ポートをリッスンし、Web サーバーからのリクエストを受信する役割を担うマスター プロセスは 1 つだけです。通常は複数のワーカー プロセスがあります (特定の数は実際のニーズに応じて構成されます)。各プロセスには PHP インタープリターがあります。内部に埋め込まれており、コードが実際に実行される PHP です。

2. Nginx と Php-fpm を組み合わせる方法

Nginx には http リクエストを処理する機能があるだけでなく、リバース プロキシとしても使用できることがわかっています。
つまり、Nginx は、リバース プロキシ機能を通じて動的リクエストをバックエンド Php-fpm に転送します。

新しい Nginx Php-fpm を設定しましょう

1. nginx.conf ファイルを設定します

nginx ディレクトリに入り、nginx.conf ファイルを編集します。
図に示すように、nginx.conf の最後の行にインクルード ファイルを追加します

2. 対応するサーバーを追加します

Enter上記のインクルード パスを指定してサーバーを追加します。

#構成項目の意味を説明しましょう:

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   127.0.0.1:9000; #nginx fastcgi进程监听的IP地址和端口
    }

}

簡単に言うと、www.example にアクセスしたときです。 .com の処理フローは次のようになります。

 www.example.|
        ||
        |.example.com/index.|
        |-|
        |-cgi监听127.0.0.1:|
        |.example.com/index.php请求到达127.0.0.1:9000
        |
        |
   等待处理。。。

このリクエストを処理できるように php の php-fpm を有効にしましょう

php-を開きますfpm.conf ファイルを参照して、次の設定に移動します。

つまり、php-fpm モジュールは 127.0.0.1:9000 ポートをリッスンし、リクエストを待ちます。処理されることになります。

3. 概要

nginx と php-fpm の組み合わせ、完全なプロセスは次のようになります。

nginx与php-fpm的结合,完整的流程是这样的。

     www.example.com        
            |
        |
      Nginx        
         |
        |
    路由到www.example.com/index.php        
          |
        |
    加载nginx的fast-cgi模块        
          |
        |
    fast-cgi监听127.0.0.1:9000地址        .
          |
        |
   www.example.com/index.php请求到达127.0.0.1:9000
        |
        |
  php-fpm 监听127.0.0.1:9000
        |
        |
  php-fpm 接收到请求,启用worker进程处理请求        
           |
        |
   php-fpm 处理完请求,返回给nginx        
           |
        |
  nginx将结果通过http返回给浏览器

4. エフェクトの表示

1. nginx と php-fpm モジュールの起動

無事起動したので、php-fpm を確認してみましょうプロセス

上に示すように、マスター プロセスが 1 つとワーカー プロセスが 3 つあります。

2. Web サイトのディレクトリにファイルを作成します

以下に示すようにファイルを編集します:

3. Web サイトにアクセスします

この記事はここで終了です。さらにエキサイティングなコンテンツについては、PHP 中国語 Web サイトの PHP ビデオ チュートリアル 列に注目してください。

以上がPHP と nginx 間の動作メカニズムと原理の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。