Table of Contents
PHP-FPM Introduction
CGI protocol and FastCGI protocol
What is PHP-FPM
Nginx and php-fpm communication mechanism
The combination of Nginx and php-fpm
Selection in application
Home Backend Development PHP Tutorial Let's talk about the communication mechanism between Nginx and php-fpm and see how to configure it?

Let's talk about the communication mechanism between Nginx and php-fpm and see how to configure it?

Mar 08, 2022 am 10:38 AM
nginx php php-fpm

This article will talk about the communication mechanism between Nginx and php-fpm, introduce the differences between the two communication methods, see how to configure the combination of Nginx and php-fpm, and analyze how to choose the communication method in the application. Hope it can help everyone!

Let's talk about the communication mechanism between Nginx and php-fpm and see how to configure it?

PHP-FPM Introduction

CGI protocol and FastCGI protocol

Each dynamic language (PHP, Python etc.) code files need to pass the corresponding parser to be recognized by the server, and the CGI protocol is used to enable the interpreter and the 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
        |
        |
     等待处理...

The combination of Nginx and php-fpm

On Linux, there are two ways of communication between nginx and php-fpm: tcp 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:

Due to Unix socket There is no need to go through the network protocol stack, package and unpack, calculate checksums, maintain sequence numbers and responses, etc. It just copies the 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 you need to pay attention to the nginx process There is a problem with the permissions of php-fpm, otherwise it will prompt that there is no permission to access. (Set users in 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

The backlog default bit is 128, 1024. This value is best converted into your own normal QPS, and 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.

Recommended learning: "PHP Video Tutorial"

The above is the detailed content of Let's talk about the communication mechanism between Nginx and php-fpm and see how to configure it?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

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.

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 Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

PHP Tutorial
1504
276
PHP calls AI intelligent voice assistant PHP voice interaction system construction PHP calls AI intelligent voice assistant PHP voice interaction system construction Jul 25, 2025 pm 08:45 PM

User voice input is captured and sent to the PHP backend through the MediaRecorder API of the front-end JavaScript; 2. PHP saves the audio as a temporary file and calls STTAPI (such as Google or Baidu voice recognition) to convert it into text; 3. PHP sends the text to an AI service (such as OpenAIGPT) to obtain intelligent reply; 4. PHP then calls TTSAPI (such as Baidu or Google voice synthesis) to convert the reply to a voice file; 5. PHP streams the voice file back to the front-end to play, completing interaction. The entire process is dominated by PHP to ensure seamless connection between all links.

How to use PHP to build social sharing functions PHP sharing interface integration practice How to use PHP to build social sharing functions PHP sharing interface integration practice Jul 25, 2025 pm 08:51 PM

The core method of building social sharing functions in PHP is to dynamically generate sharing links that meet the requirements of each platform. 1. First get the current page or specified URL and article information; 2. Use urlencode to encode the parameters; 3. Splice and generate sharing links according to the protocols of each platform; 4. Display links on the front end for users to click and share; 5. Dynamically generate OG tags on the page to optimize sharing content display; 6. Be sure to escape user input to prevent XSS attacks. This method does not require complex authentication, has low maintenance costs, and is suitable for most content sharing needs.

How to use PHP combined with AI to achieve text error correction PHP syntax detection and optimization How to use PHP combined with AI to achieve text error correction PHP syntax detection and optimization Jul 25, 2025 pm 08:57 PM

To realize text error correction and syntax optimization with AI, you need to follow the following steps: 1. Select a suitable AI model or API, such as Baidu, Tencent API or open source NLP library; 2. Call the API through PHP's curl or Guzzle and process the return results; 3. Display error correction information in the application and allow users to choose whether to adopt it; 4. Use php-l and PHP_CodeSniffer for syntax detection and code optimization; 5. Continuously collect feedback and update the model or rules to improve the effect. When choosing AIAPI, focus on evaluating accuracy, response speed, price and support for PHP. Code optimization should follow PSR specifications, use cache reasonably, avoid circular queries, review code regularly, and use X

Beyond the LAMP Stack: PHP's Role in Modern Enterprise Architecture Beyond the LAMP Stack: PHP's Role in Modern Enterprise Architecture Jul 27, 2025 am 04:31 AM

PHPisstillrelevantinmodernenterpriseenvironments.1.ModernPHP(7.xand8.x)offersperformancegains,stricttyping,JITcompilation,andmodernsyntax,makingitsuitableforlarge-scaleapplications.2.PHPintegrateseffectivelyinhybridarchitectures,servingasanAPIgateway

Object-Relational Mapping (ORM) Performance Tuning in PHP Object-Relational Mapping (ORM) Performance Tuning in PHP Jul 29, 2025 am 05:00 AM

Avoid N 1 query problems, reduce the number of database queries by loading associated data in advance; 2. Select only the required fields to avoid loading complete entities to save memory and bandwidth; 3. Use cache strategies reasonably, such as Doctrine's secondary cache or Redis cache high-frequency query results; 4. Optimize the entity life cycle and call clear() regularly to free up memory to prevent memory overflow; 5. Ensure that the database index exists and analyze the generated SQL statements to avoid inefficient queries; 6. Disable automatic change tracking in scenarios where changes are not required, and use arrays or lightweight modes to improve performance. Correct use of ORM requires combining SQL monitoring, caching, batch processing and appropriate optimization to ensure application performance while maintaining development efficiency.

Building Resilient Microservices with PHP and RabbitMQ Building Resilient Microservices with PHP and RabbitMQ Jul 27, 2025 am 04:32 AM

To build a flexible PHP microservice, you need to use RabbitMQ to achieve asynchronous communication, 1. Decouple the service through message queues to avoid cascade failures; 2. Configure persistent queues, persistent messages, release confirmation and manual ACK to ensure reliability; 3. Use exponential backoff retry, TTL and dead letter queue security processing failures; 4. Use tools such as supervisord to protect consumer processes and enable heartbeat mechanisms to ensure service health; and ultimately realize the ability of the system to continuously operate in failures.

python run shell command example python run shell command example Jul 26, 2025 am 07:50 AM

Use subprocess.run() to safely execute shell commands and capture output. It is recommended to pass parameters in lists to avoid injection risks; 2. When shell characteristics are required, you can set shell=True, but beware of command injection; 3. Use subprocess.Popen to realize real-time output processing; 4. Set check=True to throw exceptions when the command fails; 5. You can directly call chains to obtain output in a simple scenario; you should give priority to subprocess.run() in daily life to avoid using os.system() or deprecated modules. The above methods override the core usage of executing shell commands in Python.

Creating Production-Ready Docker Environments for PHP Creating Production-Ready Docker Environments for PHP Jul 27, 2025 am 04:32 AM

Using the correct PHP basic image and configuring a secure, performance-optimized Docker environment is the key to achieving production ready. 1. Select php:8.3-fpm-alpine as the basic image to reduce the attack surface and improve performance; 2. Disable dangerous functions through custom php.ini, turn off error display, and enable Opcache and JIT to enhance security and performance; 3. Use Nginx as the reverse proxy to restrict access to sensitive files and correctly forward PHP requests to PHP-FPM; 4. Use multi-stage optimization images to remove development dependencies, and set up non-root users to run containers; 5. Optional Supervisord to manage multiple processes such as cron; 6. Verify that no sensitive information leakage before deployment

See all articles