PHP7.0-FPM和Nginx不能使用unix套接字

我有一个麻烦,没有在networking上描述。 我正在使用VPS Debian 8 Nginx + PHP7.0-FPM 。 我的服务器在源代码中提供了php文件,当我configurationNginx和PHP7.0-FPM使用unix套接字 (我这样做,因为我读它工作得更快,然后TCP连接),它不编译。

所以我真的做了什么,这是行不通的

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

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

  1. 编辑/etc/nginx/sites-available/example.com我在那里inputfastcgi_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来监听套接字(但现在我不明白为什么我需要在这里):

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

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

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

  3. 重启服务:

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

所以这得到我的index.php下载,因为它是当我访问任何网站页面。

但是如果我使用tcp socket fastcgi_pass 127.0.0.1:9000; 它工作正常。

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

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

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

在php-fpm方面, pool.d中的每个configuration文件都是一个独立的PHP可执行文件池,每个都需要自己的套接字。 www.conf不是一个“主”configuration文件,它是一个完全独立的进程池,如果不使用它,应该禁用/删除。 将两个池configuration为使用相同的套接字,这里肯定存在冲突。

过于复杂的location是怎么回事?

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

我希望你的请求不是真的匹配这个。

你真正需要的是:

 location ~ \.php$ {