nginx与php-fpm原理

一.正向代理与反向代理

1.正向代理:访问google.com

google.com   vpn需要FQ才能访问

vpn 对于我们来说是可以感知到的(我们连接vpn),但对于google服务器是不知道的,google只知道有http请求来过.

对于人来说可以感知到,但服务器感知不到的服务器,我们叫他正向代理服务器。

2.反向代理:通过反向代理实现负载均衡

  访问baidu,百度有个代理服务器,通过这个代理服务器,可以做负载均衡,路由到不同的server

此代理服务器,对我们来说是不可感知的,(我们只知道访问了百度服务器,不知道中间有代理服务器做负载均衡)

此代理服务器,对于"server1 server2 server3"是可以感知的(代理服务器负载均衡到路由到不同的server)

对于人来说不可感知,但对于服务器来说是可以感知的,我们叫他反向代理服务器

二、初识Nginx与Php-fpm

Nginx是什么

Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。

Php-fpm是什么

1.cgi ,Fast-cgi协议

早起webserver只能处理html静态文件,之后出现了php这种动态语言.webserver处理不了了,只好交给php解释器来处理,但是php解释器怎么和webserver进行通信呢?

为了解决不同的语言解释器(如php、python解释器)与webserver的通信,于是出现了cgi协议。只要你按照cgi协议去编写程序,就能实现语言解释器与webwerver的通信。如php-cgi程序。

fast-cgi的改进

有了cgi协议,解决了php解释器与webserver通信的问题,webserver终于可以处理动态语言了。但是,webserver每收到一个请求,都会去fork一个cgi进程,请求结束再kill掉这个进程。这样有10000个请求,就需要fork、kill php-cgi进程10000次。很浪费资源.

于是,出现了cgi的改良版本,fast-cgi。fast-cgi每次处理完请求后,不会kill掉这个进程,而是保留这个进程,使这个进程可以一次处理多个请求。这样每次就不用重新fork一个进程了,大大提高了效率。

2、php-fpm是什么

php-fpm即php-Fastcgi Process Manager.
php-fpm是 FastCGI 的实现,并提供了进程管理的功能。
进程包含 master 进程和 worker 进程两种进程。
master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个(具体数量根据实际需要配置),每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方。

三、Nginx如何与Php-fpm结合

Nginx不只有处理http请求的功能,还能做反向代理。Nginx通过反向代理功能将动态请求转向后端Php-fpm。

下面我们来配置一个全新的Nginx+Php-fpm

1、配置nginx.conf文件

进入nginx目录下,编辑 nginx.conf文件。
如图,在nginx.conf最后一行,添加include文件

2、添加对应的server

进入上面include的路径,添加一个server,一个server就是可以理解为一个项目对应的地址,可以配置好多server

配置项的意义:
server {
    listen       80; #监听80端口,接收http请求
    server_name  www.example.com; #就是网站地址
    root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径
    #路由到网站根目录www.example.com时候的处理
    location / {
        index index.php; #跳转到www.example.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; #nginx fastcgi进程监听的IP地址和端口     #fastcgi_pass  uinx:/var/run/php/php7.0-fpm.sock;     也可以配置成 sock 监听,
    }

}
也可以引入 fastcgi_params文件同时加入fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
fastcgi.conffastcgi_params多了这个.
当我们访问www.example.com的时候,处理流程是这样的:下面我们启用php的php-fpm来处理这个请求打开php-fpm.conf文件,我们看到如下配置:php-fpm模块监听127.0.0.1:9000端口,等待请求到来去处理。 用.sock 文件监听时这个时候要修改 /etc/php/fpm/pool.d 下的 www.conf文件的 listen项配置. 

时间: 2024-10-09 08:55:10

nginx与php-fpm原理的相关文章

Nginx解析PHP的原理 | CGI、FastCGI及php-fpm的关系

Nginx解析PHP的原理,CGI/FastCGI以及PHP-Fpm的关系. 一.PHP+Nginx应运而生的场景.随着互联网的发展,用户对此接受面广,数据流的增大使得Web端的运行承载压力日益增大,野蛮生长在大数据时代里的WEB语言PHP也找到了比老搭档更优越的活力搭档Nginx,说到Nginx咱就一起唠一唠这其中的奥妙. 从以下几个维度来剖析一下Nginx的活力所在,当然是和解析PHP的老搭档APACHE相比而言. 性能1.1 资源占有率少,节省内存资源1.2 非阻塞式的请求处理机制给之增加

Nginx FastCGI的运行原理

一.FastCGI 1.介绍 CGI全称通用网关接口 Commmon Gateway Interface 用于HTTP服务上的程序服务通信交流的一种工具,CGI程序须运行在网络服务器上. 传统CGI接口方式性能较差,由于每次HTTP服务器遇到动态程序需要重启解析器来执行解析,然后结果被返回给HTTP服务器.这在处理高并发时,几乎是不可能的,因此诞生了FastCGI.另外传统的CGI接口方式安全性也很差 一个可伸缩地.高速地在HTTP服务器和动态脚本语言间通信的接口 接口在linux下是socke

Nginx 模块的工作原理

Nginx 模块的工作原理  Handlers :(处理器模块)此模块直接处理请求 并且进行内容传输以及修改headres信息等操作.Handlers模块只能处理一个. Filters(处理器模块):此类模块只需要对其他服务器模块输出的内容进行修改操做,最后又Nginx操做 proxies(代理模块):此模块是Nginx的htttp upstream之类的模块.这些模块主要与后端一些服务比如fastcgi等进行交互,实现服务代理和负载均衡功能. Nginx工作模式:再工作上,Nginx分为单工进

十五大原理之一--Nginx FastCGI的运行原理

一.FastCGI 1.介绍 CGI全称通用网关接口 Commmon Gateway Interface 用于HTTP服务上的程序服务通信交流的一种工具,CGI程序须运行在网络服务器上. 传统CGI接口方式性能较差,由于每次HTTP服务器遇到动态程序需要重启解析器来执行解析,然后结果被返回给HTTP服务器.这在处理高并发时,几乎是不可能的,因此诞生了FastCGI.另外传统的CGI接口方式安全性也很差 一个可伸缩地.高速地在HTTP服务器和动态脚本语言间通信的接口 接口在linux下是socke

三分钟看懂Nginx服务器的缓存原理和机制

Nginx服务器的缓存原理,是在学习过程中比较重要的一个知识点,学习通透之后,对于自己的能力会有不小的提升--而且提升不只限于nginx一方面,技术理论一通百通,对于理解其他内容也会有很大帮助. Web缓存主要思想 Web缓存技术的基本思想是利用客户访问的时间局部性原理,对客户已经访问过的内容在Nginx服务器本地建立副本,这样在一段时间内再次访问该数据,就不需要通过Nginx服务器再次向后端服务器发出请求,所以能够减少Nginx服务器与后端服务器之间的网络流量,减轻网络拥塞,同时还能减小数据传

nginx phase handler的原理和选择

nginx phase handler的原理和选择 PHASE HANDLER的种类 nginx在接收并解析完请求行,请求头之后,就会依次调用各个phase handler. phase handler是完成nginx主要功能的阶段. Nginx有如下11种phase,phase会依次执行.同一个phase,可能会挂载多个handler.其中斜体加粗的phase,不允许挂载用户自定义的handler PHASE 备注 NGX_HTTP_POST_READ_PHASE 读取请求内容阶段 NGX_H

Nginx负载均衡 ssl原理 生成ssl密钥对 Nginx配置ssl

一.Nginx负载均衡#dig //dig命令其实就是解析bash: dig: command not found#yum install -y bind-utils#dig qq.com //解析qq.com,可以看到qq.com解析到了3个IP上,可以使用这3个IP去做负载均衡#cd /usr/local/nginx/conf/vhost/#vi ld.conf#/usr/local/nginx/sbin/nginx -t#/usr/local/nginx/sbin/nginx -s rel

Nginx-->进阶-->原理-->Nginx+php+fastcgi的原理与关系

一.用户对动态PHP网页访问过程 用户浏览器发起对网页的访问:http://192.168.1.103/index.php 用户和nginx服务器进行三次握手进行TCP连接(忽略包括nginx访问控制策略.nginx防火墙等访问控制策略) 第一步:用户将http请求发送给nginx服务器 第二步:nginx会根据用户访问的URI和后缀对请求进行判断 1.例如用户访问的index.php,nginx则会根据配置文件中的location进行匹配,例如: [email protected]:/data

Nginx+php+fastcgi的原理与关系

一.用户对动态PHP网页访问过程 用户浏览器发起对网页的访问:http://192.168.1.103/index.php 用户和nginx服务器进行三次握手进行TCP连接(忽略包括nginx访问控制策略.nginx防火墙等访问控制策略) 第一步:用户将http请求发送给nginx服务器 第二步:nginx会根据用户访问的URI和后缀对请求进行判断 例如用户访问的index.php,nginx则会根据配置文件中的location进行匹配,例如: [email protected]:/data/w

Nginx + fastcgi + php 的原理与关系

CGI:Common Gateway Interface 公共网关接口,web服务器和脚本语言通信的一个标准.接口.协议[协议] FastCGI:CGI协议的升级版[协议] PHP-CGI: 实现了CGI接口协议的PHP脚本解析器[程序] PHP-FPM: 管理和调度php-cgi进程,进而实现了FastCGI接口协议的程序[程序] 问题:CGI对每个请求会parse一遍对应脚本的配置文件(如php.ini), 加载配置和扩展,初始化执行环境,性能非常差,所有有了下面的流程: 那么实现Fastc