我用php5-fpm设置了一个nginx服务器.当我尝试加载网站时,我得到一个没有错误的空白页面.Html页面很好,但不是PHP.我尝试在php.ini中打开display_errors但没有运气.php5-fpm.log没有产生任何错误,也不是nginx.
nginx.conf
server {
listen 80;
root /home/mike/www/606club;
index index.php index.html;
server_name mikeglaz.com www.mikeglaz.com;
error_log /var/log/nginx/error.log;
location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
这是我的nginx错误日志:
2013/03/15 03:52:55 [error] 1020#0: *55 open() "/home/mike/www/606club/robots.txt" failed (2: No such file or directory), client: 199.30.20.40, server: mikeglaz.com, request: "GET /robots.txt HTTP/1.1", host: "mikeglaz.com"
Run Code Online (Sandbox Code Playgroud)
小智 329
更换
include fastcgi_params;
Run Code Online (Sandbox Code Playgroud)
同
include fastcgi.conf;
Run Code Online (Sandbox Code Playgroud)
并在nginx.conf中删除fastcgi_param SCRIPT_FILENAME ...
Jul*_*Lam 241
作为参考,我附加我的location块用于捕获.php扩展名为的文件:
location ~ \.php$ {
include /path/to/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
Run Code Online (Sandbox Code Playgroud)
仔细检查/path/to/fastcgi-params,并确保nginx用户存在并可读.
Con*_*ing 53
也有这个问题,终于在这里找到了解决方案.简而言之,您需要将以下行添加到您的nginx fastcgi配置文件中(Ubuntu 12.04中的/ etc/nginx/fastcgi_params)
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)
Die*_*ino 40
许多用户都希望在使用nginx + php-fpm时找到显示空白页面的解决方案,我就是其中之一.这是我在阅读了许多答案以及我自己的调查(更新到php7.2)之后我最终做的回顾:
1)打开/etc/php/7.2/fpm/pool.d/www.conf并检查参数值listen.
listen = /var/run/php/php7.2-fpm.sock
Run Code Online (Sandbox Code Playgroud)
2)参数listen应匹配fastcgi_pass站点配置文件中的参数(i,e :) /etc/nginx/sites-enabled/default.
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
Run Code Online (Sandbox Code Playgroud)
3)检查文件是否确实存在:
$ file /var/run/php/php7.2-fpm.sock
/var/run/php/php7.2-fpm.sock: socket
Run Code Online (Sandbox Code Playgroud)
4)如果它不存在意味着php7.2-fpm没有运行,那么你需要重新启动它:
$ sudo /etc/init.d/php7.2-fpm restart
[ ok ] Restarting php7.2-fpm (via systemctl): php7.2-fpm.service.
Run Code Online (Sandbox Code Playgroud)
关于以下location部分/etc/nginx/sites-enabled/default:
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
Run Code Online (Sandbox Code Playgroud)
检查snippets/fastcgi-php.conf位置存在的文件/etc/nginx/:
$ file /etc/nginx/snippets/fastcgi-php.conf
/etc/nginx/snippets/fastcgi-php.conf: ASCII text
Run Code Online (Sandbox Code Playgroud)
该文件包含php7.2-fpm所需的变量定义列表.变量直接定义或通过包含分离的文件定义.
include fastcgi.conf;
Run Code Online (Sandbox Code Playgroud)
此文件位于,/etc/nginx/fastcgi.conf它看起来像:
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
...
fastcgi_param REDIRECT_STATUS 200;
Run Code Online (Sandbox Code Playgroud)
nginx包含两个可能的参数文件:fastcgi_params和fastcgi.conf.两者之间的区别是变量的定义SCRIPT_FILENAME:
$ diff fastcgi_params fastcgi.conf
1a2
> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)
总而言之,fastcgi.conf应该始终有效.如果由于某种原因你设置的是使用fastcgi_params,你应该定义SCRIPT_FILENAME:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Run Code Online (Sandbox Code Playgroud)
现在重新加载nginx配置:
$ sudo nginx -s reload
Run Code Online (Sandbox Code Playgroud)
并检查一个PHP文件是否正确显示.例如:
/var/www/html/test.php
<pre><?php var_export($_SERVER)?></pre>
Run Code Online (Sandbox Code Playgroud)
/var/www/html文档根目录的路径在哪里.
尽管如此,您仍然会看到一个空白文件,请确保php.ini已short_open_tag启用(如果您正在测试带有短标签的PHP页面).
Tim*_*Tim 20
确保你在/ etc/nginx/fastcgi_params中有这个
fastcgi_param SCRIPT_FILENAME $ request_filename;
谁知道为什么不存在呢?这必须浪费的时间量!
tu-*_*duh 15
我写了一个简短的C程序,它返回从nginx传递给fastCGI应用程序的环境变量.
#include <stdlib.h>
#include <fcgi_stdio.h>
extern char **environ;
int main(int argc, char **argv) {
char *envvar;
int i;
int count = 0;
while(FCGI_Accept() >= 0) {
printf("Content-type: text/html\n\n"
"<html><head><title>FastCGI Call Debug Tool</title></head>\n"
"<body><h1>FastCGI Call Debugging Tool</h1>\n"
"<p>Request number %d running on host <i>%s</i></p>\n"
"<h2>Environment Variables</h2><p>\n",
++count, getenv("SERVER_NAME"));
i = 0;
envvar = environ[i];
while (envvar != NULL) {
printf("%s<br/>",envvar);
envvar = environ[++i];
}
printf("</p></body></html>\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
将其保存到文件中,例如 fcgi_debug.c
编译它,首先安装gcc和libfcgi-dev,然后运行:
gcc -o fcgi_debug fcgi_debug.c -lfcgi
Run Code Online (Sandbox Code Playgroud)
要运行它,请安装spawn-fcgi,然后运行:
spawn-fcgi -p 3000 -f /path/to/fcgi_debug
Run Code Online (Sandbox Code Playgroud)
然后,将您的nginx fcgi配置更改为指向调试程序:
fastcgi_pass 127.0.0.1:3000;
Run Code Online (Sandbox Code Playgroud)
重新启动nginx,刷新页面,您应该看到浏览器中出现的所有参数供您调试!:-)
这些提示帮助我安装了Ubuntu 14.04 LTS,
此外,我需要转上short_open_tag中/etc/php5/fpm/php.ini
$ sudo kate /etc/php5/fpm/php.ini
short_open_tag = On
$ sudo service php5-fpm restart
$ sudo service nginx reload
Run Code Online (Sandbox Code Playgroud)
小智 5
添加此内容/etc/nginx/conf.d/default.conf:
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
124856 次 |
| 最近记录: |