我正在重新安装FreeBSD(最新的稳定生产版本),并从软件包中安装了nginx和php72。我的第一个困难是,网络上的大多数信息都与从源代码构建这些应用程序有关,并且程序包将.conf文件和其他内容放置在不同的目录中。我想我是在 Nginx HTTP Server-第四版和一些浏览器的帮助下得出的。 Nginx可以很好地提供静态文件。但是PHP无法正常工作。每次尝试运行包含php-info()的简短脚本都会导致:
发生错误。抱歉,您正在寻找的页面当前 不可用。请稍后再试。如果您是系统 此资源的管理员,则应检查错误日志中是否存在 细节。忠实的,nginx。
几年前,我发现了这个Stack Exchange问题: File Not Found when running PHP with Nginx我尝试了问题中给出的几种解决方案,包括67票赞成和10票赞成的解决方案。您可以在下面的nginx.conf文件中看到它们。这是我的nginx.conf文件:
user nginx;
worker_processes auto;
worker_priority 10;
# This default error log path is compiled-in to make sure configuration parsing
# errors are logged somewhere, especially during unattended boot when stderr
# isn't normally logged anywhere. This path will be touched on every nginx
# start regardless of error log location configured here. See
# https://trac.nginx.org/nginx/ticket/147 for more info.
#
error_log /var/log/nginx/error.log;
#
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
server_name JRWFreeBSD;
listen 80;
root /usr/local/www/nginx/documents;
index index.html index.htm index.php
#charset koi8-r;
#access_log logs/host.access.log main;
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~* \.php$ {
root /usr/local/www/nginx/documents;
fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
include fastcgi_params;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /usr/local/www/nginx/documents$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
}
}
}
enter code here
(此nginx.config文件基于nginx附带的默认值。我只包括了我实际使用的服务器块,而没有注释掉的块。) 文件文件夹中的所有文件均具有用户nginx / nginx组作为所有者,权限为755。Nginx加载时不会报告任何配置文件(包括php-fpm的配置文件)中的错误。由于我已将nginx正确配置为提供静态文件,因此日志文件中没有任何显示。 我已经验证了根路径-/ usr / local / www / nginx / documents-是正确的。 Nginx从那里提供静态文件。 以下名为phpinfo.php的脚本在文档中。
<?php
// Show all information, defaults to INFO_ALL
phpinfo();
?>
php-我给我的结果包括以下几行:
Environment
OLDPWD => /usr/local/etc/nginx
--snip--
PWD => /usr/local/www/nginx/documents
PHP Variables
$_SERVER['OLDPWD'] => /usr/local/etc/nginx
--snip--
$_SERVER['PWD'] => /usr/local/www/nginx/documents
命令行php脚本有效。
一切看起来都不错,但是当nginx服务时php脚本无法运行。
答案 0 :(得分:1)
解决了! sockstat告诉我,没有人在听127.0.0.1,而当我在寻找一种解决方法时,我发现当nginx将脚本发送到该IP地址时,php-fpm72在/ var / run / php72-fpm上进行监听.sock
我对nginx.conf进行了以下更改:
fastcgi_pass unix:/var/run/php72-fpm.sock;
#fastcgi_pass 127.0.0.1:9000;
PHP脚本现在可以工作。从FreeBSD pkg系统安装nginx会安装默认的nginx.conf脚本,该脚本与我从pkg安装php-fpm72时创建的默认.conf脚本不兼容。不过,我还有一个问题:我应该向pkg维护者提交错误吗?
编辑添加:谢谢哈斯女士让我重新检查使我走上正确路径的日志。此外,Gelov先生,我用重点突出的版本替换了我的几行内容。