我有一个麻烦,没有在networking上描述。 我正在使用VPS Debian 8 Nginx + PHP7.0-FPM 。 我的服务器在源代码中提供了php文件,当我configurationNginx和PHP7.0-FPM使用unix套接字 (我这样做,因为我读它工作得更快,然后TCP连接),它不编译。
所以我真的做了什么,这是行不通的 :
#fastcgi_pass 127.0.0.1:9000;
我所有的主机都包含这个文件,所以我需要在每个主机文件中configuration自己的套接字。 我这样做:
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; }
编辑主php7.0-fpm池文件/etc/php/7.0/fpm/pool.d/www.conf来监听套接字(但现在我不明白为什么我需要在这里):
listen = /var/run/php/php7.0-fpm.sock
编辑我的网站的池文件/etc/php/7.0/fpm/pool.d/example.com.conf设置它自己的套接字(所以这里有必要,我想):
listen = /var/run/php/example.com.php7.0-fpm.sock
重启服务:
服务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$ {