Home  >  Article  >  Backend Development  >  A brief discussion on the relationship between PHP-FPM, Nginx and FastCGI

A brief discussion on the relationship between PHP-FPM, Nginx and FastCGI

青灯夜游
青灯夜游forward
2021-06-09 18:35:143092browse

This article will talk about the relationship between PHP-FPM, Nginx, and FastCGI, as well as the configuration of Nginx reverse proxy and load balancing. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to everyone.

A brief discussion on the relationship between PHP-FPM, Nginx and FastCGI

##The relationship between PHP-FPM, Nginx, FastCGI

FastCGI is a protocol, it It is the bridge connecting applications and WEB servers. Nginx cannot communicate directly with PHP-FPM, but passes the request to PHP-FPM for processing through FastCGI.

location ~ \.php$ {
    try_files $uri /index.php =404;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Here fastcgi_pass forwards all php requests to php-fpm for processing. You can see through the netstat command that the process running on the port 127.0.0.1:9000 is php-fpm.

A brief discussion on the relationship between PHP-FPM, Nginx and FastCGI

Nginx reverse proxy

The most important instruction of Nginx reverse proxy is proxy_pass, such as:

location ^~ /seckill_query/ {
    proxy_pass http://ris.filemail.gdrive:8090/;
    proxy_set_header Host ris.filemail.gdrive;
}

location ^~ /push_message/ {
    proxy_pass http://channel.filemail.gdrive:8090/;
    proxy_set_header Host channel.filemail.gdrive;
}

location ^~ /data/ {
    proxy_pass http://ds.filemail.gdrive:8087/;
    proxy_set_header Host ds.filemail.gdrive;
}

Match the url path through location and forward it to another server for processing.

Reverse proxy can also be implemented through load balancing upstream.

Nginx Load Balancing

Introduce the upstream module:

The load balancing module is used to download data from "upstream" Select a host from the list of backend hosts defined by the directive. nginx first uses the load balancing module to find a host, and then uses the upstream module to interact with the host.

Load balancing configuration:

upstream php-upstream {
    ip_hash;

    server 192.168.0.1;
    server 192.168.0.2;
}

location / {
    root   html;
    index  index.html index.htm;
    proxy_pass http://php-upstream;
}

This example defines a load balancing configuration for php-upstream, and applies this configuration through the proxy_pass reverse proxy directive. The ip_hash algorithm used here has many load balancing algorithms, so I won’t list them all one by one.

Load balancing can also be used on fastcgi_pass.

For example:

fastcgi_pass http://php-upstream

Question

What is the relationship between reverse proxy and load balancing

The two words reverse proxy and load balancing often appear together, but they are actually different concepts. Load balancing emphasizes more on an algorithm or strategy that will request Distributed to different machines, it actually acts as a reverse proxy.

The difference between proxy_pass and fastcgi_pass

One is the reverse proxy module, and the other is forwarded to the factcgi backend for processing.

A brief discussion on the relationship between PHP-FPM, Nginx and FastCGI

Recommended study: "

PHP Video Tutorial"

The above is the detailed content of A brief discussion on the relationship between PHP-FPM, Nginx and FastCGI. For more information, please follow other related articles on the PHP Chinese website!

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