NGINX 服务器未执行 php 文件

NGINX 服务器未执行 php 文件

首先,我是新手,也是 unix 新手。我之前的经验仅限于 cPanel、Plesk 等。因此,如果我的方法存在一些错误,请原谅我。

我有一台 Centos(版本 7.3.1611)VPS,带有 Nginx(1.10.2)和 PHP(7.0.17)。

我遵循了一些指南来运行 PHP,并按照这里给出的一些针对类似问题的答案进行操作,但无济于事。

这是我的配置:

www.conf:

listen = /run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
user = nginx
group = nginx

我改变了 php-fpm.sock 的权限和所有权。

nginx.conf:

include /etc/nginx/default.d/*.conf;

nginx/default.d/default.conf:

index index.php index.html index.htm;
server_name _;
# pass the PHP scripts to FastCGI server listening on the php-fpm socket
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
try_files $uri =404;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

最后我创建了一个 info.php 文件。执行它时我收到一个 nginx 错误:您正在寻找的页面暂时不可用。请稍后再试。

如果禁用 nginx 错误页面,浏览器会询问我是否要下载文件 info.php。

谢谢你帮助我!

答案1

我更喜欢使用 TCP 套接字,而不是 Unix 套接字。我发现它们更容易使用,而且我读到它们的扩展性更好。

在您的 PHP 池配置中(对我来说是 /etc/php-fpm-5.6.d/www.conf),将您的监听更改为此行。请注意,我的

listen = 127.0.0.1:9000

在您的 Nginx 配置中使用

fastcgi_pass 127.0.0.1:9000;

关键是确保您在 PHP 池中定义的用户可以访问您希望他们执行的文件。权限是问题的主要来源。您可以使用 sudo 来假设他们的用户,从而对此进行测试。

sudo su nginx # or www-data, or whatever you use
cd /var/www/website
more filename.php

我有多个使用 PHP 的网站,因此我实际上在一个 conf 文件中定义了 PHP,然后多次使用它。因此在upstream.conf 中我有

upstream php56-fpm {
  server 127.0.0.1:9000;
}

fastcgi_pass php56-fpm;

我定义了多个池,以保持测试和生产独立。我的生产池始终有监听器准备就绪,而我的测试池则没有。这很好解释这里

相关内容