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

PHP と nginx 間の動作メカニズムと原理

little bottle
little bottle転載
2019-04-17 16:23:412457ブラウズ

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

Nginx とは

Nginx (「エンジン x」) は、高パフォーマンス HTTP およびリバース プロキシ サーバー、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上記のインクルード パスを指定して、A サーバーを追加します。

設定項目の意味を説明しましょう:


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地址和端口
    }

}

In短い: www.example.com にアクセスすると、処理フローは次のとおりです:


##

 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 の 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 ビデオ チュートリアル

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

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