在我的 nginx 配置中,我将 PHP 指向为/var/run/php8.3-fpm.sock
。
因为该路径中有一个特定的版本,所以使用update-alternatives
不会改变我的网站使用的 PHP 版本。
我如何获得一个指向我选择的 PHP 版本的套接字update-alternatives
?
目前没有/var/run
我可以指出的与版本无关的 sock 文件。
答案1
编辑:
正如ᴍᴇʜᴏᴠ 所指出的,Debian做支持update-alternatives
套接字,但它的做法有点不同,有两个要求:
- 您必须运行来自2020 年 2 月 1 日或更晚(希望如此)
- 你必须跑步systemd与 sysvinit 相比
通用套接字位于/run/php/php-fpm.sock
,由 systemd 单元文件通过调用 和 指令创建/usr/lib/php/php-fpm-socket-helper
。ExecStartPost
如果ExecStopPost
您希望使用此套接字,您仍需要确保您的 Web 服务器配置指向它,而不是指向特定于版本的文件。
如果您不满足这些要求,请参阅以下原始答案。
看来您正在运行基于 Debian/Ubuntu 的发行版,该发行版有意将 php-fpm 安装在特定版本的位置(这就是您可以用来update-alternatives
动态切换默认版本的全部原因)。但是,php-fpm 的套接字文件没有替代配置(您对 的调用update-alternatives
只会更改 CLI PHP 版本/usr/bin/php
)。
要使用的套接字文件在 中定义/etc/php/8.3/fpm/pool.d/www.conf
。
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on
; a specific port;
; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses
; (IPv6 and IPv4-mapped) on a specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php/php8.3-fpm.sock
如果你真的想要一个与版本无关的套接字文件,您可以将该设置更改为仅此listen = /run/php/php-fpm.sock
,并相应地更新您的 nginx 配置。您需要对安装的每个 PHP 版本执行此操作,这也意味着您不能同时运行两个不同的 php-fpm 版本。
您也许可以尝试创建自己的update-alternative
配置,以便/run/php/php-fpm.sock
在版本之间切换,但我不确定以/run
这种方式管理文件的效果如何。
答案2
这在 Debian 11 上似乎不是问题,我/run/php/php-fpm.sock
也可以同时使用两者/etc/alternatives/php-fpm.sock
。
# ls -la /run/php
total 20
drwxr-xr-x 2 www-data www-data 260 Mar 29 19:24 .
drwxr-xr-x 20 root root 600 Mar 29 19:24 ..
-rw-r--r-- 1 root root 3 Mar 29 19:24 php5.6-fpm.pid
srw-rw---- 1 www-data www-data 0 Mar 29 19:24 php5.6-fpm.sock
-rw-r--r-- 1 root root 3 Mar 29 19:24 php7.3-fpm.pid
srw-rw---- 1 www-data www-data 0 Mar 29 19:24 php7.3-fpm.sock
-rw-r--r-- 1 root root 3 Mar 29 19:24 php7.4-fpm.pid
srw-rw---- 1 www-data www-data 0 Mar 29 19:24 php7.4-fpm.sock
-rw-r--r-- 1 root root 3 Mar 29 19:24 php8.2-fpm.pid
srw-rw---- 1 www-data www-data 0 Mar 29 19:24 php8.2-fpm.sock
-rw-r--r-- 1 root root 3 Mar 29 19:24 php8.3-fpm.pid
srw-rw---- 1 www-data www-data 0 Mar 29 19:24 php8.3-fpm.sock
lrwxrwxrwx 1 root root 30 Mar 29 19:24 php-fpm.sock -> /etc/alternatives/php-fpm.sock
查看/etc/alternatives/php-fpm.sock
指向的位置:
# stat /etc/alternatives/php-fpm.sock
File: /etc/alternatives/php-fpm.sock -> /run/php/php8.3-fpm.sock
让我们使用以下命令将 PHP 重新配置为 5.6。它将向您显示可用的版本并提示输入一个数字。
update-alternatives --config php-fpm.sock
再检查一遍:
# stat /etc/alternatives/php-fpm.sock
File: /etc/alternatives/php-fpm.sock -> /run/php/php5.6-fpm.sock