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. Windows Internals 笔记——终止进程

    1.进程可以通过以下四种方式终止: 主线程的入口点函数返回(强烈推荐的方式) 进程中的一个线程调用ExitProcess函数(避免这种方式) 另一个进程中的线程调用TerminateProcess函数 ...

  2. python开发环境_windows系统安装_错误记录

    1 安装python编译器2.7.11版本 (安装包自带pip,setuptools,依赖,会将pip,setuptools安装到自己的类库中) 配置环境变量: 配置python_home,然后加入p ...

  3. ASP.NET 多环境下配置文件web.config的灵活配置

    调试,发布Asp.net程序的时候,开发环境和发布环境的Web.Config往往不同,比如connectionstring等.如果常常有调试,发布的需求,就需要常常修改web.config文件,这往往 ...

  4. Linux下如何查看系统启动时间和运行时间以及安装时间

    1.uptime命令输出:16:11:40 up 59 days, 4:21, 2 users, load average: 0.00, 0.01, 0.00 2.查看/proc/uptime文件计算 ...

  5. 消息队列——ActiceMQ

    1.下载apache-activemq-5.xx.x,\bin\win64目录下运行activemq.bat.之后可进入管理员界面http://localhost:8161/admin,账号密码均为a ...

  6. SAS 对数据的拼接与串接

    SAS 对数据的拼接与串接 使用SAS对数据进行串接.合并.更新与修改. 1. 数据集的纵向串接 数据集的纵向串接指的是,将两个或者多个数据集首尾相连,形成 一个新的数据集. 对数据集的纵向串接可以通 ...

  7. bzoj3124: [Sdoi2013]直径 树形dp two points

    题目链接 bzoj3124: [Sdoi2013]直径 题解 发现所有直径都经过的边 一定在一条直径上,并且是连续的 在一条直径上找这段区间的两个就好了 代码 #include<map> ...

  8. Faster数据库研习,一

    什么是Faster   Faster 是一个很屌的嵌入式KeyValue 数据库项目   我简单的把 微软官网怎么吹的给大家翻译一下:   Faster:一个为状态管理而生的嵌入式并发KeyValue ...

  9. 使php支持pdo_mysql

    1.下载pdo_mysql包 wget https://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz 2.追加编译php,使其module目录下生产pdo_mysql.so ...

  10. Mouse w/o Borders实现两台主机共用一套键鼠方法及问题处理

    因为经常遇到同时用到实验室配备的主机和自己的笔记本同时使用的场景,两台设备需要切换两套键鼠很麻烦,这里介绍一个微软开发的一个免费软件Microsoft Garage Mouse without Bor ...