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/bar
URL时会发生什么?
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 模块指令配置它的构造方式
- 1 回答
- 0 关注
- 193 浏览
添加回答
举报