PHP7.0-FPM 和 Nginx 无法使用 unix 套接字工作

PHP7.0-FPM 和 Nginx 无法使用 unix 套接字工作

我遇到了一个网上没有描述的问题。我使用的是 VPS Debian 8Nginx + PHP7.0-FPM。当我配置 Nginx 和 PHP7.0-FPM 以使用时,我的服务器以源代码形式提供 php 文件,但不编译它们unix 套接字(我这样做是因为我读到它比 tcp 连接更快)。

所以我真正做的是,但没有效果

  1. 编辑 /etc/nginx/fastcgi_params 以注释 fastcgi_pass 参数以使用 unix 套接字文件:
#fastcgi_pass    127.0.0.1:9000;

我的所有主机都包含此文件,因此我需要在每个主机文件中配置自己的套接字。我这样做:

  1. 编辑 /etc/nginx/sites-available/example.com 我在那里输入 fastcgi_pass 参数
location ~ '\.php$|^/update.php' {
fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
fastcgi_pass      unix:/var/run/php/example.com.php7.0-fpm.conf;
        include             /etc/nginx/fastcgi_params;

        fastcgi_param       SCRIPT_FILENAME     /var/www/example.com/www$fastcgi_script_name;
        fastcgi_param       DOCUMENT_ROOT       /var/www/example.com/www;

        fastcgi_param       PHP_ADMIN_VALUE     upload_tmp_dir=/var/www/example.com/tmp/upload;
        fastcgi_param       PHP_ADMIN_VALUE     session.save_path=/var/www/example.com/tmp/sessions;
    }
  1. 编辑主 php7.0-fpm 池文件 /etc/php/7.0/fpm/pool.d/www.conf 以监听套接字(但现在我不明白为什么我在这里需要它):

    监听 = /var/run/php/php7.0-fpm.sock

  2. 编辑我的站点的池文件 /etc/php/7.0/fpm/pool.d/example.com.conf 来设置它自己的套接字(所以我认为这里是必要的):

    监听 = /var/run/php/example.com.php7.0-fpm.sock

  3. 重启服务:

    服务 nginx 重启 && 服务 php7.0-fpm 重启

因此当我访问任何网站页面时,我的index.php 都会被下载。

但如果我使用 tcp 套接字,fastcgi_pass 127.0.0.1:9000;它就能正常工作。

答案1

看起来你的文件名是错误的,fastcgi_pass它应该是:

fastcgi_pass      unix:/var/run/php/example.com.php7.0-fpm.sock;

确保 php-fpm 正在运行,并且套接字文件存在且具有正确的权限,以便 nginx 可以访问该文件。如果您已安装并强制执行 selinux,您可能还需要检查其日志以查看它是否阻止 nginx 访问该文件。

在 php-fpm 方面,每个配置文件pool.d都是一个单独的 PHP 可执行文件池,每个文件都需要自己的套接字。 www.conf不是“主”配置文件,它是一个完全独立的进程池,如果您不使用它,则应将其禁用/删除。由于两个池都配置为使用相同的套接字,因此这里肯定会发生冲突。

答案2

太过复杂是怎么回事location

location ~ '\.php$|^/update.php' {

我预计您的请求实际上与此不符。

你真正需要的是:

location ~ \.php$ {

答案3

Unix 套接字具有权限

php7.2-fpm服务根据配置创建php与nginx连接socket

sudo nano /etc/php/7.2/fpm/pool.d/www.conf

该文件有

listen = /run/php/php7.2-fpm.sock
listen.owner = www-data
listen.group = www-data

一旦你启动/重新启动该服务

sudo systemctl restart php7.2-fpm.service

它创建一个表示具有指定所有者和组的套接字的文件

ls -la /run/php

但是 Nginx 默认使用另一个用户,你可以在

sudo nano /etc/nginx/nginx.conf

用户 nginx;

现在由您来决定如何调整权限。要么为套接字文件提供更多权限,要么更改侦听用户,要么更改 nginx 用户...您可以选择答案。

相关内容