【问题标题】:php-fpm doesn't create .sock filephp-fpm 不创建 .sock 文件
【发布时间】:2016-05-23 21:39:15
【问题描述】:

我有一个在 Amazon 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",它只返回 /var/run/rpcbind.sock

【问题讨论】:

  • fpm配置是否正确,见文件/etc/php5/fpm/pool.d/<config>.conf文件?
  • 我在那个文件中找到了我的答案,它没有指向任何套接字文件。

标签: php centos php-7


【解决方案1】:

编辑:这里真正的解决方案是在 nginx 配置中的 www.conffastcgi_pass 中的监听必须匹配。使用套接字还是 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;

【讨论】:

  • 这不是一个真正的答案,只是一个替代解决方案。手头的问题专门针对套接字文件,而不是 TCP/IP
  • PHP FPM 通常更容易在 TCP/IP 上设置,但速度较慢。
  • @nito 确实如此,但是套接字只能处理非常少量的流量。
  • 适用于 php7 + centos7 + nginx^^ 在service start 上没有创建 .sock 文件(权限?不确定),无论哪种方式这个都有效^
  • 这个答案对我帮助很大:stackoverflow.com/a/15424808/104380
【解决方案2】:
  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

【讨论】:

  • 如果您托管多个站点,您需要fastcgi_param 做什么?你可以重复使用单个套接字吗?
【解决方案3】:

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

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

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

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

因此,当复制/粘贴池配置时:更改池名称和套接字名称!

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

      希望这会有所帮助!

      【讨论】:

        【解决方案6】:

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

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

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

        【讨论】:

        • 哈利路亚! :D 从另一个配置文件复制和粘贴后,我也忘记更改“池名称”(您是指“节”)。
        【解决方案7】:

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

        希望对某人有所帮助:)

        【讨论】:

          【解决方案8】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-02-09
            • 2020-01-01
            • 2017-06-16
            • 2017-02-16
            • 2019-01-13
            • 2014-08-04
            • 2014-07-07
            相关资源
            最近更新 更多