首先,我是新手,也是 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;
我定义了多个池,以保持测试和生产独立。我的生产池始终有监听器准备就绪,而我的测试池则没有。这很好解释这里。