有个PHP-CGI运行过程的疑惑,求解惑

发布于 2022-09-01 13:10:58 字数 356 浏览 17 评论 0

php-cgi使用过程有个疑惑,大牛们帮忙解惑一下。

假设场景如下:
nginx 监听 192.168.1.101:80,没有php环境
index.php 192.168.1.101::/dev/shm/index.php
php-fpm监听 192.168.1.102:90000

存在的困惑是,index.php 在运行过程中,是在 192.168.1.101 进行解析运行,还是发送到 192.168.1.102 解析运行?详细的过程哪个大牛来给解惑一下?

如果是在 1.102 解析运行,一旦碰到phar这种比较大的代码包或者单个较大的php文件,是否是整个包一起发送过去?内网流量是不是很可观的样子?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

幸福不弃 2022-09-08 13:10:58

监听 192.168.1.101:80 的 Nginx 通过 fastcgi_pass 把 PHP 请求分发到 PHP-FPM 监听的 192.168.1.102:9000 , PHP-FPM 根据 Nginx 请求, 解析 Nginx 传过来的这个参数 $_SERVER['SCRIPT_FILENAME'] 指定的 PHP 文件, PHP-FPM 工作进程内部的 PHP 解释器执行完脚本后把结果通过局域网返回给 Nginx.

Nginx 和 PHP-FPM 进程间采用了 TCP 网络通信, 而 MOD_PHP 这种把 PHP 解释器作为一个模块集成到 Apache 进程(线程)内部运行的模式是完全不同的, 通过 Nginx 的 upstream, 很容易实现 PHP-FPM 集群和高可用.

另外:
Apache 通过 mod_fastcgi 模块可以搭配 PHP-FPM 使用, 这时建议 Apache 使用 event MPM 这个多进程多线程 epoll 事件驱动的 MPM. PHP-FPM 则采用默认的非线程安全版本, 更高效和稳定.
Apache 通过 mod_fcgid 模块可以搭配 PHP-CGI 使用, 建议同上.
注意到, Apache 的 mod_fastcgi 模块类似于 Nginx 提供的 fastcgi 支持, 功能跟 mod_fcgid 不一样, 比mod_fcgid 高效, 因为 mod_fcgid 需要自己管理 PHP-CGI 进程,而 mod_fastcgi 下,是 PHP-FPM 主进程管理自己的 FPM 工作进程.

め可乐爱微笑 2022-09-08 13:10:58

感谢 @白一梓,@eechen 两位大拿的回答,其实问这个问题,想了解的是192.168.1.102 这个机器上是否需要布php脚本。因为之前主要用的是apache,很少用到php-fpm~

刚刚自己找了两台服务器搭了一下环境,大概理解了。

其实 php-fpm 只是接收到 nginx 传过来的header,也就是fastcgi_param,然后找到 SCRIPT_FILENAME 之后,从1.102 自身硬盘上加载脚本并执行,也就是 nginx 和 php-fpm 传输的过程,只是 header,与脚本无关,然后通过 header 跟apache一样执行php代码~

也就是,抛开apache的其他高级功能以及内部运行原理不谈,nginx + php-fpm 和 nginx + apache 在运行的流程上是基本一样的~~

遗忘曾经 2022-09-08 13:10:58

这个,我在问题http://segmentfault.com/q/1010000002753412 中已经给出答案了,我的回答中给出了流程图,应该很容易理解

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文