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. vmware ubuntu硬盘空间不够用,空间扩展

    我从来没有想过我的虚拟机内存会不够用,毕竟已经20G了,可是最近学习python,装了些学习有关的软件, 期末做libvirt管理实验,存了两个镜像,就变成这样了,所以,我就像了要扩展硬盘空间,在网上 ...

  2. SQL反模式学习笔记12 存储图片或其他多媒体大文件

    目标:存储图片或其他多媒体大文件 反模式:图片存储在数据库外的文件系统中,数据库表中存储文件的对应的路径和名称. 缺点:     1.文件不支持Delete操作.使用SQL语句删除一条记录时,对应的文 ...

  3. css_base_note

  4. phpstorm对laravel的一些使用技巧

    安装laravel插件,设置ctrl+alt+s 二 安装智能提示插件 composer require barryvdh/laravel-ide-helper 在config/app.php的pro ...

  5. Rank of Tetris 拓扑排序+并查集

    Problem Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子: ...

  6. typedef 摘自百度百科

    1.typedef的最简单使用 1 typedef long byte_4; 给已知数据类型long起个新名字,叫byte_4. 2. typedef与结构结合使用 1 2 3 4 5 6 7 8 9 ...

  7. [POJ1723]SOLDIERS(中位数)

    题意 给出n个点的坐标,它们只能往上.下.左.右一格一格地移动,求使其移动至水平线上的最小步数. 思路 转载 先易后难,对于纵向的问题,我们推个公式,,这个很容易看出是货仓选址问题,k取y[i]的中位 ...

  8. The Water Bowls [POJ3185] [开关问题]

    题意 一串长度为20的0,1数列,每次翻转i,会影响i-1,i+1,也被翻转,最少翻转成0的步骤数是多少? Sample Input 0 0 1 1 1 0 0 1 1 0 1 1 0 0 0 0 0 ...

  9. Tornado-Ajax

    介绍 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).AJAX 不是新的编程语言,而是一种使用现有标准的新方法.AJAX是在不 ...

  10. [LeetCode] Construct Quad Tree 建立四叉树

    We want to use quad trees to store an N x N boolean grid. Each cell in the grid can only be true or ...