【问题标题】:Where is php7.0-fpm.sock locatedphp7.0-fpm.sock 位于何处
【发布时间】:2023-03-05 17:28:01
【问题描述】:

我有一个带有目录结构的简单项目

我正在为我的 drupal 站点设置 nginx 配置,而对于 fastcgi_pass,我一直在使用 127.0.0.1:9000,但我想按照此 conf 中的建议使用 unix 套接字:

 # PHP 7 socket location.
   fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

但我找不到php/php7.0-fpm.sock;

我的 centos 发行版中有以下路径

/var/run/php-fpm/php-fpm.pid

【问题讨论】:

    标签: php nginx unix-socket


    【解决方案1】:

    检查 php-fpm 配置,其中将使用以下方式创建套接字:

    $ cat /etc/php/7.0/fpm/pool.d/www.conf

    查找listen,例如:

    listen = /run/php/php7.0-fpm.sock

    php-fpm 在您启动进程后 创建套接字文件。

    sudo service php7.0-fpm stop
    sudo service php7.0-fpm start
    

    检查目录是否创建了套接字文件:

    $ cd /run/php && ls -la

    【讨论】:

    • 乌布努位于哪里?
    • 我只看到php7.0-fpm.pid文件
    • 我正在运行几个 ubuntus。默认路径(我从未更改过):/var/run/php/php7.0-fpm.sock。但同样取决于配置值,如果 php-fpm 启动,则应创建此文件。
    • 但是php7.0-fpm.pid只有一个文件
    • 大声笑我可以理解为什么 Ben 放弃了! XD yasar,你来对了吗?
    【解决方案2】:

    首先检查php-fpm 是否在您的系统上运行,为此您可以使用pgrep 例如:

    # pgrep -fa php-fpm
    5666 php-fpm: master process (/etc/php-fpm.conf)
    5667 php-fpm: pool www
    5668 php-fpm: pool www
    5669 php-fpm: pool www
    5670 php-fpm: pool www
    5671 php-fpm: pool www
    

    在这种情况下,它显示已启动并正在运行并使用配置文件/etc/php-fpm.conf。在检查配置文件并尝试检查listen = 指令之前,您可以快速查看/proc/net/unix,例如:

    # grep php /proc/net/unix
    

    这可能会返回如下内容:

    ffff8800bfb2f400: 00000002 00000000 00010000 0001 01 28561 /tmp/php-fpm.sock
    

    在这种情况下,它表明 php-fpm 套接字的路径位于 /tmp/php-fpm.sock 中,可以通过检查 /etc/php-fpm.d/www.conf 中的 conf 来验证,在这种情况下为:listen= /tmp/php-fpm.sock

    如果您没有得到任何结果并且php-fpm 已启动并运行,通过检查配置,您可能会发现在 TCP 套接字上列出使用默认值:

    listen = 127.0.0.1:9000
    

    您可以更改一些内容以在 Unix 套接字上侦听,例如您建议的 conf:

    listen = /var/run/php/php7.0-fpm.sock
    

    在某些 Linux 发行版中通常使用此选项:

    listen.owner = www-data
    listen.group = www-data
    listen.mode = 0660
    

    修改配置后不要忘记重启服务systemctl restart php-fpm。要检查套接字是否已创建,您可以这样做:

    $ file /var/run/php/php7.0-fpm.sock
    

    如果 socket 存在 if 应该打印出如下内容:

    /var/run/php/php7.0-fpm.sock: socket
    

    【讨论】:

    • 只是为了弄清楚,与其他答案有什么区别?好的,centOS 中的不同路径。但还有什么?我想,我在某处读过,出于安全原因,不建议将套接字指向 /tmp。
    • @BenRoob 主要专注于在正在运行的系统上查找套接字的位置,这在调试时也很有用
    • @BenRoob 当前投票最多的答案未能解决配置在套接字上使用 IP:PORT 的情况,在这种情况下文件显然不存在。
    • 比接受的要好得多,感谢百万:) "sudo vim /etc/php-fpm.d/www.conf" 并得到 "listen = /run/php-fpm/www.sock" 所以添加了“fastcgi_pass unix:/run/php-fpm/www.sock;”在 nginx 中改为“fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock”
    【解决方案3】:

    你可以通过运行看到它

    $ ss --unix |grep 'php' 
    

    【讨论】:

      【解决方案4】:

      很可能是安装了较旧的libpcre3并满足php7.0包中的依赖,但只有较新的库包提供了pcre_jit_stack_free。

      如果是这种情况,请执行 apt-get install libpcre3,一切顺利。

      参考:https://github.com/oerdnj/deb.sury.org/issues/372

      希望对你有帮助。

      【讨论】:

        【解决方案5】:

        使用这个:

        cat /etc/php/7.0/fpm/pool.d/www.conf | grep 'listen ='
        

        输出示例:listen = /run/php/php7.2-fpm.sock

        或者对于通用 php 版本:

        cat /etc/php/$(php -r "echo PHP_VERSION;" | grep --only-matching --perl-regexp "7.\d+")/fpm/pool.d/www.conf | grep 'listen ='
        

        【讨论】:

          猜你喜欢
          • 2017-09-17
          • 2017-02-24
          • 2016-09-04
          • 1970-01-01
          • 1970-01-01
          • 2016-09-30
          • 2017-07-13
          • 2013-07-08
          • 2016-09-28
          相关资源
          最近更新 更多