c/s架构nginx+php-fpm通信原理

摘要:
FastCGI是用于HttpServer和动态脚本语言之间通信的接口。大多数流行的HttpServer都支持FastCGI,包括Apache、Nginx和lighttpd。Nginx+php-fpm实现原理Nginx本身不解析php。终端对PHP页面的请求将由Nginx转交给FastCGI进程监控的IP地址和端口,PHP-fpm将用作动态解析服务器进行处理。最后,处理结果将返回给nginx。事实上,Nginx是一个反向代理服务器。

    FastCGI是一个运用于Http Server和动态脚本语言间通信的接口,多数流行的Http Server都支持FastCGI,包括Apache、Nginx和lighttpd等。同时,FastCGI也被许多脚本语言支持,其中就有PHP。

    FastCGI接口方式采用C/S结构,可以将HttP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HttP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给客户端。这种方式可以让HttP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。
c/s架构nginx+php-fpm通信原理第1张

Nginx+php-fpm实现原理

    Nginx本身不会对PHP进行解析,终端对PHP页面的请求将会被Nginx交给FastCGI进程监听的IP地址及端口,由php-fpm作为动态解析服务器处理,最后将处理结果再返回给nginx。其实,Nginx就是一个反向代理服务器。Nginx通过反向代理功能将动态请求转向后端php-fpm,从而实现对PHP的解析支持,这就是Nginx实现PHP动态解析的原理。


    Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端。

Nginx 简单配置 
location ~ .php$ {
         root           /home/admin/web/nginx/html/;
         fastcgi_pass   127.0.0.1:9000;
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  /home/admin/web/nginx/html/$fastcgi_script_name;
         include        fastcgi_params;
        }

免责声明:文章转载自《c/s架构nginx+php-fpm通信原理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇常见类型ADC原理探秘,选型必知html5实现web app摇一摇换歌下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Nginx网络连接配置

本文记录Nginx中网络连接的设置配置项。 1)读取HTTP头部超时时间 语法:client_header_timeout time(默认单位:秒); 默认:client_header_timeout 60; 配置块: http、server、location 在与客户端建立连接之后,将开始获取HTTP头部,如果在配置的时间之内没有读取到客户端发来的字节,...

mysql 动态拼接表字段,值 mybatis 动态获取表字段

-- 取表所有字段,自动用逗号分开 select GROUP_CONCAT(DISTINCT COLUMN_NAME) from information_schema.columns where table_name='tb1'结果集:  字段1,字段2,字段3,字段4..... -- 动态拼接字段,给mybatis用 某些业务情况下没有去使用自动生成代...

docker部署django项目、mysql主从搭建、django实现读写分离

目录 docker部署django项目 1.1 基于python基础镜像 将本地django项目打包并发到远程服务器上 将服务器上的.zip django项目解压 部署的具体流程 1.2 基于dockerfile 2 mysql主从搭建 一 主从配置原理 二 操作步骤 2.1我们准备三台装好mysql的服务器(我在此用docker模拟...

前后端分离的思考与实践(六)

原文出处: 淘宝UED - 筱谷    Nginx + Node.js + Java 的软件栈部署实践 起 关于前后端分享的思考,我们已经有五篇文章阐述思路与设计。本文介绍淘宝网收藏夹将 Node.js 引入传统技术栈的具体实践。 淘宝网线上应用的传统软件栈结构为 Nginx + Velocity + Java,即: 在这个体系中,Nginx 将请求转发给...

raw_socket(原始套接字)以及普通socket使用终极总结

  一、传输层socket(四层socket,普通socket) 可参考本人以下博客: Windows Socket编程之UDP实现大文件的传输:http://blog.csdn.net/luchengtao11/article/details/71016222 Windows Socket编程之TCP实现大文件的传输:http://blog.csd...

确保nginx安全的10个技巧

Nginx是当今最流行的Web服务器之一。它为世界上7%的web流量提供服务而且正在以惊人的速度增长。它是个让人惊奇的服务器,我愿意部署它。下面是一个常见安全陷阱和解决方案的列表,它可以辅助来确保你的Nginx部署是安全的。 1. 在配置文件中小心使用"if"它是重写模块的一部分,不应该在任何地方使用。“if”声明是重写模块评估指令强制性的部分。换个说法,...