php-fpm 不创建 .sock 文件

php-fpm doesn't create .sock file

我在亚马逊 Linux 上有一个 AWS 服务器 运行。

我使用本指南安装 php7(页面底部):https://forums.aws.amazon.com/thread.jspa?messageID=695576

我想使用 nginx 而不是 Apache,所以我还安装了 php70w-fpm 和 nginx 包。但是,当我 service start php-fpm 时,它不会在我的服务器上的任何位置创建 php-fpm.sock 文件。我已经签入 /var/run 并且还有 运行 find / -name "*.sock" 其中只有 returns /var/run/rpcbind.sock.

编辑:这里真正的解决方案是 nginx 配置中 www.conffastcgi_pass 中的监听必须匹配。使用 sockets 还是 tcp 由你决定。

答案是根本不使用 .sock 文件。

/etc/php-fpm.d/www.conf 中有:

listen = 127.0.0.1:9000

所以在我的 nginx 配置中我输入了

fastcgi_pass 127.0.0.1:9000;

而不是使用类似

的东西
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

我知道为时已晚,但这可能会有所帮助。您可以使用 Python 从头开始​​创建一个新的锁定文件。

python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/run/php/php-fpm.sock')"

如果您的 php-fpm 由 systemd 控制,您必须检查 php-fpm 服务单元文件中的 PrivateTmp 选项(您可以将此文件方式 find /etc/systemd -name "php-fpm*" ! -type d)

如果此选项设置为true PrivateTmp=true,将为php-fpm主进程创建新的文件系统命名空间,默认情况下其他进程将无法操作此命名空间中的文件( nginx,例如)。您可以在此处阅读有关 systemd PrivateTmp 选项的更多详细信息:https://www.freedesktop.org/software/systemd/man/systemd.exec.html

希望对您有所帮助!

就我而言,我错过了 /etc/php/7.0/fpm/pool.d/wordpress.conf 正确的部分

[wordpress]
listen = /var/run/php7-fpm-wordpress.sock

*.sock 文件不是从文件名创建的,而是从节名创建的。

  1. 确保您拥有以下文件夹并且它是可写的。 /var/run/php-fpm

  2. 然后在 www.conf 中输入: listen = /var/run/php-fpm/php-fpm.sock

  3. 然后 运行: sudo service php-fpm restart

  4. 然后更新您的 nginx.conffastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
  5. 最后重启nginx: sudo service nginx restart

我遇到了错误,因为我复制粘贴了一个 pool.d/xx.conf 并且新的具有相同的池名称 [whatever],所以第二个没有加载。 没有错误,没有套接字。

希望对某人有所帮助:)

我遇到了同样的问题 - 没有创建套接字 - 和 Phil 的解决方案相同。

我刚刚复制粘贴了一个池文件,并且只更改了侦听部分中的套接字名称。没有插座。

这是因为池名称已被使用。当您已经有同名的池时,则不会创建新的套接字。

因此,为每个套接字设置唯一的池名称很重要。

所以当 copy/paste 池配置时:更改池名称和套接字名称!

在我的例子中,当在 Ispconfig 3.2.2 中将特定网站的 PHP 版本示例更改为 PHP7.4 时,应该在 /etc/php/7.4/fpm/pool.d/ 中创建 webxx.conf 文件但是,它是在根 /.

下创建的

所以现在我只是将 webxx.conf 文件移动到 /etc/php/7.4/fpm/pool.d/ 并重新启动 PHP7.4-fpm sudo systemctl restart php7.4-fpm 并且它可以正常工作。