用户名:    密码:   注册
首页> 电脑杂记

Nginx+Php-fpm运行原理详解

2018-03-21 14:02    203次

一、代理与反向代理

现实生活中的例子

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

如上图,因为google被墙,我们需要vpn翻墙才能访问google.com。

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

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

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

如上图,我们访问baidu.com的时候,baidu有一个代理服务器,通过这个代理服务器,可以做负载均衡,路由到不同的server。

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

此代理服务器,对于"server1 server2 server3"是可感知的(代理服务器负载均衡路由到不同的server)
对于人来说不可感知,但对于服务器来说是可以感知的,我们叫他反向代理服务器

总结

说白了:“正向”、“反向”是相对于人的感知来说的。
人能感受到的代理就是正向代理,人感受不到的代理就是反向代理。

二、初识Nginx与Php-fpm

Nginx是什么

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

Php-fpm是什么

1、cgi、fast-cgi协议
cgi的历史

早期的webserver只处理html等静态文件,但是随着技术的发展,出现了像php等动态语言。
webserver处理不了了,怎么办呢?那就交给php解释器来处理吧!
交给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 {
    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地址和端口
    }

}

总而言之:当我们访问www.example.com的时候,处理流程是这样的:

  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的php-fpm来处理这个请求

打开php-fpm.conf文件,我们看到如下配置:

即:php-fpm模块监听127.0.0.1:9000端口,等待请求到来去处理。

四、总结

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返回给浏览器
        

五、效果展示

1、启动nginx与php-fpm模块

启动成功,我们查看php-fpm进程

如上图,有一个master进程,3个worker进程。

2、在网站目录下建立文件

我们编辑文件如下图:

3、访问网站

 

    游客111.29.65.* :2018-03-21 14:38


    你(PHP)去和爱斯基摩人(web服务器,如 Apache、Nginx)谈生意

    你说中文(PHP代码),他说爱斯基摩语(C代码),互相听不懂,怎么办?那就都把各自说的话转换成英语(FastCGI 协议)吧。

    怎么转换呢?你就要使用一个翻译机(PHP-FPM)
    (当然对方也有一个翻译机,那个是他自带的)

    我们这个翻译机是最新型的,老式的那个(PHP-CGI)被淘汰了。不过它(PHP-FPM)只有年轻人(Linux系统)会用,老头子们(Windows系统)不会摆弄它,只好继续用老式的那个。
    回复
    游客36.101.180.* :2018-03-21 18:29  
    比较形象,哈
  • 网友评论仅供网友表达个人看法,并不表明三亚资讯同意其观点或证实其描述:
  • 验证码:
  • 佳位招租先到折多
    13078956218

    海南荣通搬家货运

    搬家服务:专业家具师傅,提供家具拆装、组装、沙发维修翻新
    搬迁服务:长短途搬家、搬厂、搬写字楼
    货运服务:三亚、海口、琼海周边至全岛各市县1-3吨 急货快运,上门提货、送货到家

    服务热线:18889966338

     三亚便民
    三亚车辆年检
    维修家庭普通电路,电话13401
    对中医推拿有多年工作经验及临床操
    海南荣通搬家货运
    中国南方电网天涯供电所桶井收费点
    三亚中法供水有限公司
    电脑桌,保密柜,办公家具用品定制
    泉源康体养生
    渔夫清吧
    世纪宝迪健身会所
     三亚新闻
    2015十大旅游目的地揭晓 海口
    “探索一号”科考船将在三亚进行海
    三亚17项承诺治“城市病”
    三亚領海:可享海、园、山、湖景四
    五四青年节 三亚人民医院微笑服务
    对他人爆粗口 三亚一出租车司机被
    张琦:全力推进“双修”等工作 使
    三亚农贸市场猪肉供应充足 价格恢
    三亚12月底将完成建筑废弃物综合
    三亚首次公布终身禁驾人员名单
     三亚美食
    大糖糖小吃明天正式推出正餐,金鸡
    祖传秘制私房特色地方美食——鸭
    海掌柜海鲜
    汉密欣语(商品街店)
    小湖南家常菜馆
    【牛太郎】 大型无烟自助烤蒸
    原味主张椰子鸡(胜利店)
    原味主张椰子鸡(三亚店)
    海南特色哈氏餐厅
    北国香餐馆
     三亚旅游
    三亚千古情景区
    三亚宋城旅游区5月推双重特惠
    “永乐号”5月20日开启三亚海上
    那片海——三亚海棠湾
    关于三亚
    红艺人歌舞表演
    大小洞天
    美丽之冠
    三亚湾
    南田温泉
     三亚酒店宾馆
    三亚浪漫海景公寓兰海花园三亚湾店
    三亚湾HelloKitty主题客
    三亚凤凰岛空中花园酒店
    【鹿回头】三亚明申高尔夫度假酒店
    【临春河路】三亚沐蓝湾酒店
    【三亚湾路】三亚海贝贝沙滩度假屋
    【河西路】东升快捷商务酒店
    【团结路】一路向南旅行客栈
    【三亚湾路】椰林滩大酒店
    【三亚湾路】三亚侨商酒店
    关于我们      版权声明      服务条款      联系我们      站点地图      sitemaps    琼ICP备05002060号       ©Copyright 2003 - 2018  www.sunya.cn  三亚资讯