浏览器打开index.php发生了发什么?

记得毕业那年,面试官问我,用户打开浏览器发生了什么,当时回答的糊里糊涂,然后糊里糊涂地被录用了。

今天,我和大家分享这道面试题的。

无图无真相,上图:

浏览器打开index.php发生了发什么?_第1张图片

下面是php以cgi运行图:

php以fast-cgi运行:
浏览器打开index.php发生了发什么?_第2张图片

从php-cgi和php-fpm对比可以看到,fastcgicgi和cgi模型相比,省去了部分的过程,从而速度更快,更节省内存。

早些的时候,web服务器将收到的请求交给php接口,这个借口叫做php-cgi。

cgi 是一种标准,perl、php、python等多种语言都使用cgi标准,这个标准的工作方式使得这些语言可以被其他的软件调用,但是cgi方式慢,因此有了fastcgi标准的调用接口,比如php的php-fpm实现。

php的cgi可执行文件是php/bin/php-cgi,php-fpm实现是php/sbin/php-fpm文件。

但是,不论是php-cgi还是php-fpm,最终都是要将php代码交给php解析器的,只是php-fpm使用fastcgi标准,php-cgi使用cgi标准,更为先进一些而已。

1、查看PHP -fpm

root      3011  0.0  0.4 196692  4720 ?        Ss   Jul11   0:00 php-fpm: master process (/phpstudy/server/php/etc/php-fpm.conf)

www       3013  0.0  0.7 199284  7720 ?        S    Jul11   0:00 php-fpm: pool www

www       3014  0.0  0.7 199284  7744 ?        S    Jul11   0:00 php-fpm: pool www

从上面我们可以清晰地看到一个php-fpm 主进程,多个php-fpm子进程。

2、查看Nginx

root      3015  0.0  0.1  47536  1196 ?        Ss   Jul11   0:00 nginx: master process /phpstudy/server/nginx/sbin/nginx
www       3017  0.0  0.1  50044  1968 ?        S    Jul11   0:00 nginx: worker process
www       3018  0.0  0.1  50044  1968 ?        S    Jul11   0:00 nginx: worker process
www       3019  0.0  0.1  50044  1968 ?        S    Jul11   0:00 nginx: worker process
www       3020  0.0  0.1  50044  1968 ?        S    Jul11   0:00 nginx: worker process

nginx的做法也是这样,一个master进程,多个work进程。

参考文献:
搞不清FastCgi与PHP-fpm之间是个什么样的关系
Nginx中FastCGI配置优化

你可能感兴趣的:(运维,php,nginx,php)