Home  >  Article  >  Backend Development  >  The operating mechanism and principles between PHP and nginx

The operating mechanism and principles between PHP and nginx

little bottle
little bottleforward
2019-04-17 16:23:412485browse

1. Popularize knowledge points related to Nginx and Php-fpm

What is Nginx

Nginx ("engine x") is a high-performance HTTP and reverse proxy server, also an IMAP/POP3/SMTP server.

What is Php-fpm

1. cgi, fast-cgi protocol
History of cgi

Early webservers only processed html, etc. Static files, but with the development of technology, dynamic languages ​​​​such as php have appeared.
The webserver cannot handle it, what should I do? Then let the php interpreter handle it!
It’s good to leave it to the PHP interpreter, but how does the PHP interpreter communicate with the webserver?

In order to solve the communication problem between different language interpreters (such as php, python interpreters) and webserver, the cgi protocol appeared. As long as you write a program according to the cgi protocol, you can achieve communication between the language interpreter and webwerver. Such as php-cgi program.

Improvements of fast-cgi

With the cgi protocol, the problem of communication between the php interpreter and the webserver is solved, and the webserver can finally handle dynamic languages.
However, every time the webserver receives a request, it will fork a cgi process, and then kill the process after the request is completed. If there are 10,000 requests, the php-cgi process needs to be forked and killed 10,000 times.

Have you ever found it to be a waste of resources?

So, an improved version of cgi, fast-cgi, appeared. After fast-cgi processes a request each time, it will not kill the process, but retain the process so that the process can handle multiple requests at one time. In this way, there is no need to re-fork a process every time, which greatly improves efficiency.

2. What is php-fpm

php-fpm is php-Fastcgi Process Manager.
php-fpm is the implementation of FastCGI and provides process management functions .
The process includes two types of processes: master process and worker process.
There is only one master process, which is responsible for listening to the port and receiving requests from the Web Server. There are generally multiple worker processes (the specific number is configured according to actual needs). Each process has a PHP interpreter embedded inside it, which is PHP Where the code actually executes.

2. How to combine Nginx with Php-fpm

We know that Nginx not only has the function of processing http requests, but also can be used as a reverse proxy.
So Nginx forwards dynamic requests to the backend Php-fpm through the reverse proxy function.

Let’s configure a new Nginx Php-fpm

1. Configure the nginx.conf file

Enter the nginx directory and edit the nginx.conf file.
As shown in the figure, in the last line of nginx.conf, add the include file

2. Add the corresponding server

Enter the include path above and add A server.

Let’s explain the meaning of the configuration items:


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 short: when we visit www. For example.com, the processing flow is as follows:


 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
        |
        |
   等待处理。。。

Next we enable php-fpm of php to handle this request

Open the php-fpm.conf file, we see the following configuration:

That is: the php-fpm module listens to the 127.0.0.1:9000 port and waits for the request to be processed. .

3. Summary

The combination of nginx and php-fpm, the complete process is like this.


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. Effect display

1. Start nginx and php-fpm modules

Start successfully, let’s check the php-fpm process

##As shown above, there is one master process and three worker processes.

2. Create a file in the website directory

We edit the file as shown below:

3. Visit the website

【Related tutorials: PHP video tutorial

The above is the detailed content of The operating mechanism and principles between PHP and nginx. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:cnblogs.com. If there is any infringement, please contact admin@php.cn delete