search
HomeBackend DevelopmentPHP TutorialSummary of the communication mechanism between PHP-FPM and Nginx

Summary of the communication mechanism between PHP-FPM and Nginx

[Related learning recommendations: php graphic tutorial]

PHP-FPM Introduction

CGI Protocol and FastCGI Protocol

The code files of each dynamic language (PHP, Python, etc.) need to pass the corresponding parser before they can be Server identification, and the CGI protocol is used to enable the interpreter and server to communicate with each other. The parsing of PHP files on the server requires the use of a PHP interpreter, coupled with the corresponding CGI protocol, so that the server can parse PHP files.

Since the mechanism of CGI requires forking a CGI process for each request, and then killing the process after the request is completed, which is a waste of resources in practical applications, so an improved version of CGI, FastCGI, appeared. After processing, the process will not be killed, but multiple requests will continue to be processed, which greatly improves efficiency.

What is PHP-FPM

PHP-FPM is PHP-FastCGI Process Manager. It is the implementation of FastCGI and provides process management functions. The process includes two types: master process and worker process; there is only one master process, which is responsible for listening to the port and receiving requests from the server, while there are generally multiple worker processes (the specific number is configured according to actual needs), and each process will have one embedded in it. The PHP interpreter is where the code is actually executed.

Nginx and php-fpm communication mechanism

When we visit a website (such as www.test.com), the processing flow is like this:

  www.test.com
        |
        |
      Nginx
        |
        |
路由到 www.test.com/index.php
        |
        |
加载 nginx 的 fast-cgi 模块
        |
        |
fast-cgi 监听 127.0.0.1:9000 地址
        |
        |
www.test.com/index.php 请求到达 127.0.0.1:9000
        |
        |
     等待处理...

[Related article recommendations: Nginx tutorial]

The combination of Nginx and php-fpm

On Linux, the communication between nginx and php-fpm has tcp There are two ways: socket and unix socket.

The advantage of tcp socket is that it can cross servers. This method can only be used when nginx and php-fpm are not on the same machine.

Unix socket is also called IPC (inter-process communication) socket, which is used to implement inter-process communication on the same host. This method requires filling in the socket file location of php-fpm in the nginx configuration file. .

The data transmission process of the two methods is shown in the figure below:

The difference between the two:

Because Unix socket does not need to go through the network protocol stack , there is no need to pack and unpack, calculate checksums, maintain sequence numbers and responses, etc. It just copies application layer data from one process to another. Therefore, its efficiency is higher than that of tcp socket, which can reduce unnecessary tcp overhead. However, unix sockets are unstable when concurrency is high. When the number of connections explodes, a large number of long-term caches will be generated. Without the support of a connection-oriented protocol, large data packets may directly go wrong without returning an exception. Connection-oriented protocols such as tcp can better ensure the correctness and integrity of communication.

The combination of Nginx and php-fpm only requires settings in their respective configuration files:

1) Configuration in Nginx

Take tcp socket communication as an example

server {
    listen       80; #监听 80 端口,接收http请求
    server_name  www.test.com; #就是网站地址
    root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径
    #路由到网站根目录 www.test.com 时候的处理
    location / {
        index index.php; #跳转到 www.test.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; # tcp 方式,php-fpm 监听的 IP 地址和端口
       # fasrcgi_pass /usr/run/php-fpm.sock # unix socket 连接方式
    }

}

2) Configuration of php-fpm

listen = 127.0.0.1:9000
# 或者下面这样
listen = /var/run/php-fpm.sock

Note that when using unix socket to connect, since the socket file is essentially a file, there are permission control issues, so it is necessary Pay attention to the permissions of the nginx process and the permissions of php-fpm, otherwise you will be prompted to access without permission. (Set users in their respective configuration files)

The communication between php-fpm and nginx can be completed through the above configuration.

Selection in application

If nginx and php-fpm are running on the same server, and the concurrency is not high (no more than 1000), choose unix socket to improve nginx Communication efficiency with php-fpm.
If you are facing high concurrent business, consider using a more reliable tcp socket to maintain efficiency through operation and maintenance methods such as load balancing and kernel optimization.

If the concurrency is high but you still want to use unix socket, you can improve the stability of unix socket through the following methods.

1) Place the sock file in the /dev/shm directory. Place the sock file in the memory in this directory, so that the memory can be read and written faster.

2) Increase the backlog

Backlog default bit 128, 1024, this value is replaced by your normal QPS, the configuration is as follows.

nginx.conf file

server {
        listen 80 default backlog = 1024;
       }

php-fpm.conf file

listen.backlog = 1024

3) Add sock file and php-fpm instance

in/ Create a new sock file in dev/shm, load balance requests to two sock files through the upstream module in nginx, and map the two sock files to two sets of php-fpm instances.                                                                                                                                   

The above is the detailed content of Summary of the communication mechanism between PHP-FPM and Nginx. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:learnku. If there is any infringement, please contact admin@php.cn delete
PHP Dependency Injection Container: A Quick StartPHP Dependency Injection Container: A Quick StartMay 13, 2025 am 12:11 AM

APHPDependencyInjectionContainerisatoolthatmanagesclassdependencies,enhancingcodemodularity,testability,andmaintainability.Itactsasacentralhubforcreatingandinjectingdependencies,thusreducingtightcouplingandeasingunittesting.

Dependency Injection vs. Service Locator in PHPDependency Injection vs. Service Locator in PHPMay 13, 2025 am 12:10 AM

Select DependencyInjection (DI) for large applications, ServiceLocator is suitable for small projects or prototypes. 1) DI improves the testability and modularity of the code through constructor injection. 2) ServiceLocator obtains services through center registration, which is convenient but may lead to an increase in code coupling.

PHP performance optimization strategies.PHP performance optimization strategies.May 13, 2025 am 12:06 AM

PHPapplicationscanbeoptimizedforspeedandefficiencyby:1)enablingopcacheinphp.ini,2)usingpreparedstatementswithPDOfordatabasequeries,3)replacingloopswitharray_filterandarray_mapfordataprocessing,4)configuringNginxasareverseproxy,5)implementingcachingwi

PHP Email Validation: Ensuring Emails Are Sent CorrectlyPHP Email Validation: Ensuring Emails Are Sent CorrectlyMay 13, 2025 am 12:06 AM

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

How to make PHP applications fasterHow to make PHP applications fasterMay 12, 2025 am 12:12 AM

TomakePHPapplicationsfaster,followthesesteps:1)UseOpcodeCachinglikeOPcachetostoreprecompiledscriptbytecode.2)MinimizeDatabaseQueriesbyusingquerycachingandefficientindexing.3)LeveragePHP7 Featuresforbettercodeefficiency.4)ImplementCachingStrategiessuc

PHP Performance Optimization Checklist: Improve Speed NowPHP Performance Optimization Checklist: Improve Speed NowMay 12, 2025 am 12:07 AM

ToimprovePHPapplicationspeed,followthesesteps:1)EnableopcodecachingwithAPCutoreducescriptexecutiontime.2)ImplementdatabasequerycachingusingPDOtominimizedatabasehits.3)UseHTTP/2tomultiplexrequestsandreduceconnectionoverhead.4)Limitsessionusagebyclosin

PHP Dependency Injection: Improve Code TestabilityPHP Dependency Injection: Improve Code TestabilityMay 12, 2025 am 12:03 AM

Dependency injection (DI) significantly improves the testability of PHP code by explicitly transitive dependencies. 1) DI decoupling classes and specific implementations make testing and maintenance more flexible. 2) Among the three types, the constructor injects explicit expression dependencies to keep the state consistent. 3) Use DI containers to manage complex dependencies to improve code quality and development efficiency.

PHP Performance Optimization: Database Query OptimizationPHP Performance Optimization: Database Query OptimizationMay 12, 2025 am 12:02 AM

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment