PHP-FPM,Nginx,FastCGI 之間的關係

本文介紹 PHP-FPM,Nginx,FastCGI 三者之間的關係,以及 Nginx 反向代理和負載均衡的配置。php

PHP-FPM,Nginx,FastCGI 之間的關係

FastCGI 是一個協議,它是應用程序和 WEB 服務器鏈接的橋樑。Nginx 並不能直接與 PHP-FPM 通訊,而是將請求經過 FastCGI 交給 PHP-FPM 處理。html

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;
}複製代碼

這裏 fastcgi_pass 就是把全部 php 請求轉發給 php-fpm 進行處理。經過 netstat 命令能夠看到,127.0.0.1:9000 這個端口上運行的進程就是 php-fpm.nginx

file
file

Nginx 反向代理

Nginx 反向代理最重要的指令是 proxy_pass,如:算法

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;
}複製代碼

經過 location 匹配 url 路徑,將其轉發到另一個服務器處理。後端

經過負載均衡 upstream 也能夠實現反向代理。bash

Nginx 負載均衡

介紹一下 upstream 模塊:服務器

負載均衡模塊用於從」upstream」指令定義的後端主機列表中選取一臺主機。nginx先使用負載均衡模塊找到一臺主機,再使用upstream模塊實現與這臺主機的交互。負載均衡

負載均衡配置:php-fpm

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;
}複製代碼

該例定義了一個 php-upstream 的負載均衡配置,經過 proxy_pass 反向代理指令應用這個配置。這裏用的 ip_hash 算法,負載均衡的算法有多種,就不一一列舉了。url

負載均衡也能夠用在 fastcgi_pass 上。

如:

fastcgi_pass http://php-upstream複製代碼

問題

反向代理和負載均衡是什麼關係

反向代理和負載均衡這兩個詞常常出如今一塊兒,但他們其實是不一樣的概念,負載均衡它更多的是強調的是一種算法或策略,將請求分佈到不一樣的機器上,所以實際上也起到了反向代理的做用。

proxy_pass 和 fastcgi_pass 的區別

一個是反向代理模塊,一個是轉發給 factcgi 後端處理。

file
file

原文地址:blog.tanteng.me/2017/11/ngi…

相關文章
相關標籤/搜索