我已经安装在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;
}
}
编辑
这里是我的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"
Answer 1:
作为参考,我附上我的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;
}
仔细检查/path/to/fastcgi-params
,并确保它是由nginx的用户目前和可读性。
Answer 2:
更换
include fastcgi_params;
同
include fastcgi.conf;
并删除fastcgi_param SCRIPT_FILENAME ......在nginx.conf
Answer 3:
也有这个问题,终于找到了解决办法在这里 。 总之,你需要将下面的行添加到您的nginx的FastCGI的配置文件(/ etc在Ubuntu 12.04 / nginx的/ fastcgi_params)
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
Answer 4:
许多用户落入这个线程希望找到空白页面的解决方案,同时使用的nginx + PHP-FPM,我是其中之一被显示。 这是我最后读许多问题的答案在这里再加上我自己的调查(更新至php7.2)后做了概括:
1)打开/etc/php/7.2/fpm/pool.d/www.conf
和检查参数的值listen
。
listen = /var/run/php/php7.2-fpm.sock
2)参数listen
应符合fastcgi_pass
在您的站点配置文件(I,E参数: /etc/nginx/sites-enabled/default
)。
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
3)检查文件确实存在:
$ file /var/run/php/php7.2-fpm.sock
/var/run/php/php7.2-fpm.sock: socket
4)如果不存在,这意味着php7.2-FPM没有运行,所以你需要重新启动它:
$ sudo /etc/init.d/php7.2-fpm restart
[ ok ] Restarting php7.2-fpm (via systemctl): php7.2-fpm.service.
关于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;
}
检查文件snippets/fastcgi-php.conf
存在于位置/etc/nginx/
:
$ file /etc/nginx/snippets/fastcgi-php.conf
/etc/nginx/snippets/fastcgi-php.conf: ASCII text
此文件包含php7.2-FPM必需的变量定义的列表。 这些变量直接或通过定义包括一个分开的文件。
include fastcgi.conf;
该文件位于/etc/nginx/fastcgi.conf
,它看起来像:
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
...
fastcgi_param REDIRECT_STATUS 200;
nginx的包括两个可能的参数文件:fastcgi_params和fastcgi.conf。 两者之间的区别是变量的定义SCRIPT_FILENAME
:
$ diff fastcgi_params fastcgi.conf
1a2
> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
为了使长话短说,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;
}
现在重新加载nginx的配置:
$ sudo nginx -s reload
并检查一个PHP文件正确显示。 例如:
/var/www/html/test.php
<pre><?php var_export($_SERVER)?></pre>
凡/var/www/html
是路径文档根目录。
如果,尽管所有的,你看到的仍然是一个空白文件,请确保您php.ini
已经short_open_tag
启用(如果你正在测试短代码的PHP页面)。
Answer 5:
请确保您已在/ etc / nginx的/ fastcgi_params得到这个
fastcgi_param SCRIPT_FILENAME $ REQUEST_FILENAME;
谁知道为什么没有了? 这个时间必须共同废物量!
Answer 6:
我写了一个返回从nginx的传递到FastCGI应用程序的环境变量很短的C程序。
#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;
}
这个保存到一个文件,如fcgi_debug.c
编译它,首先安装gcc
和libfcgi-dev
,然后运行:
gcc -o fcgi_debug fcgi_debug.c -lfcgi
要运行它,安装spawn-fcgi
,然后运行:
spawn-fcgi -p 3000 -f /path/to/fcgi_debug
然后,改变你的nginx fcgi的配置,使其指向调试程序:
fastcgi_pass 127.0.0.1:3000;
重启nginx的,刷新页面,你应该看到所有的参数显示在您的浏览器为您调试! :-)
Answer 7:
这些提示帮助我与我的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
Answer 8:
在添加此/etc/nginx/conf.d/default.conf
:
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
Answer 9:
如果有人是有这个问题,但上述答案的解决他们的问题,我有这个同样的问题,有困难的时候跟踪下来,因为我的配置文件是正确的,我ngnix和php-fpm的工作岗位运行良好,并有通过任何错误日志来没有错误。
愚蠢的错误,但我在其中设置为我的php.ini文件从来没有检查短打开标签变量short_open_tag = Off
。 由于我的PHP文件是使用<?
而不是<?php
的页面被显示为空白。 短打开标签应该被设定为On
我的情况。
希望这可以帮助别人。
Answer 10:
出现这个问题的原因是因为在nginx的FastCGI的配置要求是不能发挥作用,并在地方或处理,他们作为HTML数据作出反应。 有两种可能的方式,你可以配置你的nginx来避免这个问题。
方法1:
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # With php5-fpm: fastcgi_pass unix:/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi.conf; }
方法2:
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; include snippets/fastcgi-php.conf; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; include fastcgi_params; }
这两种方法都将正常工作,你可以继续前进,把他们中的任何一个。 他们几乎用很少的差别执行相同的操作。
Answer 11:
以上答案都不为我工作 - PHP是正确呈现的一切,除了依靠mysqli的,为此它发送一个空白页200响应代码,而不是抛出任何错误页面。 正如我在OS X,修复只是
sudo port install php56-mysql
其次是PHP-FPM和Nginx的重新启动。
我是从旧的Apache / PHP设置迁移到nginx的,并没有注意到在驱动程序的版本不匹配php-mysql
和php-fpm
。
Answer 12:
我有一个类似的问题,nginx的是中间处理一个页面,然后停止。 这里提出的解决方案,没有一个是为我工作。 我固定它通过改变nginx的FastCGI的缓冲:
fastcgi_max_temp_file_size 0;
fastcgi_buffer_size 4K;
fastcgi_buffers 64 4k;
之后,改变我的location
块看起来像:
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_max_temp_file_size 0;
fastcgi_buffer_size 4K;
fastcgi_buffers 64 4k;
include fastcgi_params;
}
有关详情请参阅https://www.namhuy.net/3120/fix-nginx-upstream-response-buffered-temporary-file-error.html
Answer 13:
如果你得到一个空白的屏幕,这可能是由于两个原因:
正在显示的浏览器从阻塞帧。 在一些浏览器的框架被认为是不安全的。 为了克服这个问题,你可以通过启动phpPgAdmin的的无框版
http://-your-domain-name-/intro.php
您已启用的安全特征,为Nginx的X框,选择尝试禁用它。
Answer 14:
这解决了我的问题:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include snippets/fastcgi-php.conf;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
}
Answer 15:
这是我对Ubuntu 18.04 + APACHE + php7.2虚拟主机
server {
listen 80;
server_name test.test;
root /var/www/html/{DIR_NAME}/public;
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
最后一行使得它比其他的答案不同。
Answer 16:
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/PATH_TO_YOUR_PHPFPM_SOCKET_FILE/php7.0-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
祝好运
文章来源: nginx showing blank PHP pages