为了账号安全,请及时绑定邮箱和手机立即绑定

PHP-FPM 剖析

PHP-FPM 剖析

PHP
白衣染霜花 2021-11-26 19:33:21
由于 PHP-fpm wiki 已关闭并且不同的来源告诉我做不同的事情我决定在这里发布并澄清一些事情PHP-FPM 编译并执行 PHP 脚本,将输出发送回 Web 服务器。目前我使用 nginx 作为代理服务器,计划是将所有需要动态内容的请求从 nginx 发送到 PHP-fpm。并立即提出问题,我可以让多台机器运行 php-fpm 吗?(缩放和东西),我在下面找到的答案。尽管请求通过代理连接传递,但 PHP-FPM 服务必须与 Web 服务器运行在同一台服务器上。@inmotionhosting.com这听起来很合乎逻辑,因为我正在传递$document_root参数以从中加载 php 文件。我的问题是:php-fpm 究竟是如何定位它需要执行的文件的?我可以通过哪些其他参数
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

是的,您可以让多台机器运行 PHP-FPM。这意味着您必须在实例之间同步文件。

PHP-FPM 服务必须与 Web 服务器运行在同一台服务器上

这种说法并不完全正确。Web 服务器可以在一台机器上,PHP-FPM 实例可以在另一台机器上。在这种情况下,PHP-FPM 可以侦听网络套接字(端口)。只要 Web 服务器 (NGINX) 告诉 PHP-FPM 存在于 PHP-FPM 服务器上的要呈现的文件名,它就可以从中获取响应,并为客户端呈现。这对于缩放是有意义的。

对于单服务器设置(无扩展),您将在同一服务器上对所有内容进行标准设置;和 PHP-FPM 绑定到 / 侦听 UNIX 套接字,而不是网络。

PHP-FPM 是一个FastCGI服务器,所以它应该遵循协议。它并没有真正定位任何东西,这就是 NGINX 所做的。一旦完成,它就会在SCRIPT_FILENAME参数/环境变量中传递定位的文件名,同时与 PHP-FPM 交谈;这是其他几个参数之一

要影响 NGINX 定位文件的方式,您可以使用以下指令:

  • root

  • rewrite

  • alias

  • index

  • fastcg_param

例如,假设我们有一个用 PHP 编写的标准“前端控制器”网站。以下是它使用的 NGINX 配置要点:

root /var/www/html;

location / {

    try_files $uri $uri/ /index.php$is_args$args;

}

location ~ \.php$ {

    include fastcgi_params;

}

当访问者点击/foo/barURL时会发生什么?

  • NGINX 查看最长的基于前缀的位置,即为/当前请求选择它

  • 它还检查任何正则表达式位置,但没有找到与 URI 匹配的位置

  • 因此,它尝试实际查看其系统上是否存在root指令的值 +/foo/bar文件。也就是说,它使用stat系统调用检查是否/var/www/html/foo/bar存在。如果文件确实存在,它只会提供它

  • 如果该文件不存在,则 NGINX 会尝试查看/var/www/html/foo/bar/目录是否存在。如果确实如此,那么 NGINX 将按照定义的顺序检查index指令(例如index.html)定义的文件是否存在,并使用它们来满足请求(如果它们确实存在),例如/var/www/html/foo/bar/index.html

  • 如果这些都不存在,NGINX 终于知道它需要使用/index.php. 如何try_files作品是“深远”的最后一个参数会导致另一个位置搜索,而这一次它将匹配的正则表达式的位置\.php$

这就是与 PHP-FPM 对话的神奇之处,因为在 NGINX 中将传递脚本文件名,该文件名是在内部重写的请求 URIroot当前构建的。可以使用此处记录的 ngx_http_fastcgi_module nginx 模块指令配置它的构造方式


查看完整回答
反对 回复 2021-11-26
  • 1 回答
  • 0 关注
  • 193 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信