1. 代理与反向代理

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

  1. 如上图,因为google被墙,需要vpn才能访问google.com。
  2. vpn对于"我们"来说,是可以感知到的(我们连接vpn)
  3. vpn对于"google服务器"来说,是不可感知的(google只知道有http请求过来)。
  4. 对于人来说可以感知到,但服务器感知不到的服务器,我们叫他正向代理服务器。

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

  1. 如上图,我们访问baidu.com的时候,baidu有一个代理服务器,通过这个代理服务器,可以做负载均衡,路由到不同的server。
  2. 此代理服务器,对于“我们”来说是不可感知的(我们只能感知到访问的是百度的服务器,不知道中间还有代理服务器来做负载均衡)。
  3. 此代理服务器,对于"server1 server2 server3"是可感知的(代理服务器负载均衡路由到不同的server)
  4. 对于人来说不可感知,但对于服务器来说是可以感知的,我们叫他反向代理服务器。

2. 初识Nginx与PHP-FPM

1. Nginx是什么

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

2. CGI与FastCGI

1. CGI协议

  1. 早期的Web Server只处理html等静态文件,但是随着技术的发展,出现了像php等动态语言。
  2. Web Server处理不了了,怎么办呢?那就交给php解释器来处理吧!
  3. 交给php解释器处理很好,但是,php解释器如何与Web Server进行通信呢?
  4. 为了解决不同的语言解释器(如php、python解释器)与Web Server的通信,于是便出现了cgi协议。
  5. 只要按照cgi协议去编写程序,就能实现语言解释器与Web Server的通信,如php-cgi程序。

2. FastCGI协议

  1. CGI协议解决了php解释器与Web Server通信的问题,Web Server终于可以处理动态语言了。
  2. 通过CGI协议实现的程序,每收到一个Web Server请求,都会去fork一个cgi进程,请求结束再kill掉这个进程。因而导致在有大量请求的情况下,需要不断fork、kill php-cgi进程。
  3. 由于CGI协议处理比较浪费资源,于是,便出现了CGI的改良版本FastCGI。
  4. FastCGI每次处理完请求后,不会kill掉这个进程,而是保留这个进程,使这个进程可以一次处理多个请求。这样每次就不用重新fork一个进程了,大大提高了效率。

2. PHP-FPM是什么

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

3. Nginx与与PHP-FPM结合

1. 配置nginx.conf文件

2. 添加对应的server

# Nginx通过反向代理功能将动态请求转向后端PHP-FPM

server {
listen 80; #监听80端口,接收http请求
server_name www.example.com; #就是网站地址
root /data/www/domain; # 准备存放代码工程的路径 #路由到网站根目录www.example.com时候的处理
location / {
index index.php; #跳转到www.example.com/index.php
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
} #当请求网站下php文件的时候,反向代理到php-fpm
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; #nginx fastcgi进程监听的IP地址和端口
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www/domain$fastcgi_script_name;
include fastcgi_params; #加载nginx的fastcgi模块
}
}

3. 配置php-fpm.conf文件

# 取消注释
listen = 127.0.0.1:9000 # php-fpm模块监听127.0.0.1:9000端口,等待请求到来去处理

4. Nginx与PHP-FPM处理请求完整流程

www.example.com
|
|
Nginx
|
|
路由到www.example.com/index.php
|
|
加载nginx的fast-cgi模块
|
|
fast-cgi监听127.0.0.1:9000地址
|
|
www.example.com/index.php请求到达127.0.0.1:9000
|
|
php-fpm 监听127.0.0.1:9000
|
|
php-fpm 接收到请求,启用worker进程处理请求
|
|
php-fpm 处理完请求,返回给nginx
|
|
nginx将结果通过http返回给浏览器

5. 参考

Nginx+Php-fpm运行原理详解

Nginx与PHP-FPM运行原理详解的更多相关文章

  1. JVM运行原理详解

    1.JVM简析:      作为一名Java使用者,掌握JVM的体系结构也是很有必要的.      说起Java,我们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Ja ...

  2. 「JVM」知识点详解一:JVM运行原理详解

    前言 JVM 一直都是面试的必考点,大家都知道,但是要把它搞清楚又好像不是特别容易.JVM 的知识点太散,不系统,今天带大家详细的了解一下jvm的运行原理. 正文 1 什么是JVM? JVM是Java ...

  3. Kubernetes学习之路(二十)之K8S组件运行原理详解总结

    目录 一.看图说K8S 二.K8S的概念和术语 三.K8S集群组件 1.Master组件 2.Node组件 3.核心附件 四.K8S的网络模型 五.Kubernetes的核心对象详解 1.Pod资源对 ...

  4. Nginx+Php-fpm运行原理详解

    一.代理与反向代理 现实生活中的例子 1.正向代理:访问google.com 如上图,因为google被墙,我们需要vpnFQ才能访问google.com. vpn对于“我们”来说,是可以感知到的(我 ...

  5. (转)Nginx+Php-fpm运行原理详解

    一.代理与反向代理 现实生活中的例子 1.正向代理:访问google.com 如上图,因为google被墙,我们需要vpn翻墙才能访问google.com. vpn对于“我们”来说,是可以感知到的(我 ...

  6. Hadoop 2.6 MapReduce运行原理详解

    市面上的hadoop权威指南一类的都是老版本的书籍了,索性学习并翻译了下最新版的Hadoop:The Definitive Guide, 4th Edition与大家共同学习. 我们通过提交jar包, ...

  7. 正则表达式的运行原理详解(NFA,多分支原理)

    原文:https://blog.csdn.net/yx0628/article/details/82722166

  8. TOMCAT原理详解及请求过程(转载)

    转自https://www.cnblogs.com/hggen/p/6264475.html TOMCAT原理详解及请求过程 Tomcat: Tomcat是一个JSP/Servlet容器.其作为Ser ...

  9. LVS原理详解(3种工作方式8种调度算法)--老男孩

    一.LVS原理详解(4种工作方式8种调度算法) 集群简介 集群就是一组独立的计算机,协同工作,对外提供服务.对客户端来说像是一台服务器提供服务. LVS在企业架构中的位置: 以上的架构只是众多企业里面 ...

随机推荐

  1. Code First

    Add-Migration ****** Update-Database –Verbose

  2. c#一步一步实现ORM(二)

    c#一步一步实现ORM(二) 上一篇描述了简单的思路,这一片我们来稍微细化一下 1插入的时候忽略某些字段 public int Insert<T>(T o, params string[] ...

  3. react和redux版本不匹配

    1.页面报错Cannot read property 'shape' of undefined 2. 原因为:react版本与react-redux版本不匹配. 1.package.json文件修改该 ...

  4. 面试题:常用的http状态码

    3XX 重定向 301 Moved Permanently    永久重定向,表示请求的资源已经永久的搬到了其他位置 302 Found  临时重定向,表示请求的资源临时搬到了其他位置 303 See ...

  5. STL复习之 map & vector --- disney HDU 2142

    题目链接: https://vjudge.net/problem/40913/origin 大致题意: 这是一道纯模拟题,不多说了. 思路: map模拟,vector辅助 其中用了map的函数: er ...

  6. 2017-11-4—稳态和暂态/瞬态(对运放积分电路的思考)[待仿真]

    先直接截图了,暂态或者说瞬态都是暂时的状态,是从一个稳定态到另一个稳定态的过程. 之所以要了解这个概念是因为对于使用运放搭建的模拟PID有很多的疑惑,比如负反馈没有电阻满不满足"虚短&quo ...

  7. Windows中杀死占用某个端口的进程(转)

    最近写项目,总是出现端口被占用的问题,原来傻傻的把电脑重启一下,终于有一天受不了了,想要想办法解决.刚开始从网上找了好多教程,发现不行.开始自己尝试,终于,成功的将占用端口的进程杀掉.在此记录下过程( ...

  8. 24 GISer必备知识(一) 坐标系

    对于经常使用ArcMap的童鞋,肯定用过属性表中的计算几何的功能,但是有时候会提示面积计算与长度计算禁用 但是选择的明明是 Xian 1980坐标系,这是为什么呢?下面就来讲一讲这些个经常让人“头大” ...

  9. 电子产品使用感受之——为什么我那么喜欢2015年的11.6寸MacBook Air?

    2018年Mac笔记本产品线得到了一次更新,Mac book Pro, MacBook Air更新后的Mac 产品线变得更加让人摸不着头脑,价格昂贵不说,产品分类细化到如此程度,让一个选择困难症的消费 ...

  10. django项目同一用户不能同时登陆

    1.session认证 ..... login(request, user) #登录成功 # 登录之后获取获取最新的session_key session_key = request.session. ...